love.physics.newGearJoint (Русский)

Создает GearJoint для двух тел.

Это соединение использует два других соединения типа PrismaticJoint или RevoluteJoint. Использование этого соединения требует, чтобы PrismaticJoint и RevoluteJoint соединяли тела, одно из которых является статическим. Причем статическое тело в этих соединениях должно использоваться в качестве первого. Когда вы удаляете тела или соединения, то в первую очередь нужно удалять GearJoint, а потом уже все остальное.

GearJoint использует отношение, определяющее как будут относиться друг к другу угол или расстояние соединенных объектов. Формула coordinate1 + ratio * coordinate2 всегда будет равно константному значению, которое определяется при создании соединения.

Функция

Вид

joint = love.physics.newGearJoint( joint1, joint2, ratio )

Аргументы

Joint joint1
Первое соединение, используемое в GearJoint.
Joint joint2
Второе соединение, используемое в GearJoint
number ratio
Отношение.

Возвращает

Joint joint
Новое соединение GearJoint.

Пример

Две шестеренки, одна из которых вращается мышью

function love.load()
	world = love.physics.newWorld(0, 0, 640, 480) 
	love.graphics.setBackgroundColor( 64, 128, 128 )
	
	b1 = love.physics.newBody(world, 0, 0, 0, 0) --статичное тело, к которому будут крепиться шестерни
	b2 = love.physics.newBody(world, 300, 300, 50, 20)--1-я шестеренка
	b3 = love.physics.newBody(world, 235, 300, 50, 20)--2-я шестеренка
	
	--устанавливаем соединения
	j1 = love.physics.newRevoluteJoint( b1, b2, 300, 300 )
	j2 = love.physics.newRevoluteJoint( b1, b3, 235, 300 )
	j3 = love.physics.newGearJoint( j1, j2, 1 )
	
	j=love.physics.newMouseJoint(b2,love.mouse.getPosition())--привязываем одну шестеренку к мыши
end

function love.draw()
	--рисуем первую шестеренку
	love.graphics.push()
	love.graphics.setColor( 255, 150, 150, 255 )
	love.graphics.translate( b2:getX(), b2:getY() )
	love.graphics.rotate( b2:getAngle() )
	love.graphics.triangle( "fill", 0,  40,  34, -20, -34, -20 )
	love.graphics.triangle( "fill", 0, -40, -34,  20,  34,  20 )
	--рисуем вторую шестеренку
	love.graphics.pop()
	love.graphics.setColor( 150, 250, 150, 255 )
	love.graphics.translate( b3:getX(), b3:getY() )
	love.graphics.rotate( b3:getAngle() + math.pi/6 )
	love.graphics.triangle( "fill", 0,  40,  34, -20, -34, -20 )
	love.graphics.triangle( "fill", 0, -40, -34,  20,  34,  20 )
end

function love.update( dt )
	j:setTarget(love.mouse.getPosition())
	world:update(dt)
end

Смотрите также

Другие языки