Простые физические объекты в Corona / Lua - PullRequest
1 голос
/ 15 июня 2011

Не повезло на форумах Corona, поэтому я решил попробовать здесь.

Я просто пытаюсь создать объект с шарнирным соединением. Кажется простым, но это просто не работает.

Я просто не могу понять, как добавить тела в физическую систему, если эти тела являются частью объекта, созданного в отдельном файле (классе). Надеюсь, что кто-то может помочь - боролся с этим неделями.

Вот мой код:

main.lua:

local JointedObj = require("JointedObj")

local physics = require("physics")
physics.start()

local o = JointedObj.new()
o.x = 50
o.y = 200

local wall = display.newRect( 350, 10, 50, 300 )
physics.addBody ( wall, "static", {density=1, friction=1, bounce=.5})

local floor = display.newRect( 0, 300, 400, 10 )
physics.addBody ( floor, "static", {density=1, friction=1, bounce=.5})

--toss the object against the wall
o:toss(120, -160, o.x, o.y)

JointedObj.lua:

module(..., package.seeall)

--constructor
function new()
local obj = display.newGroup()

local red = display.newImageRect( "images/red.png", 27, 18 )
local blue = display.newImageRect( "images/blue.png", 11, 9 )
blue.x = -16

obj:insert(red)
obj:insert(blue)

function obj:toss(xForce, yForce, xPos, yPos )

    --THIS WORKS, BUT OBVIOUSLY THE OBJECT HAS NO JOINTS
    --physics.addBody( obj, "dynamic", {density=1, friction=1, bounce=0.3} )
    --obj:applyForce( xForce, yForce, xPos, yPos )


    --THIS IS WHAT I WANT TO DO. AS-IS, THE OBJECT JUST FALLS THROUGH EVERYTHING
    physics.addBody( red, {density=1, friction=1, bounce=0.3} )
    physics.addBody( blue, {density=1, friction=1, bounce=0.3} )
    myJoint = physics.newJoint( "pivot", red, blue, 0,0 )
    myJoint.isLimitEnabled = true
    myJoint:setRotationLimits( -30, 30 )
    --obj:applyForce( xForce, yForce, xPos, yPos )  --THIS THROWS A NIL ERROR IF UNCOMMENTED


end


return obj;
end

1 Ответ

1 голос
/ 16 июня 2011

Физика не работает между группами, только внутри группы.Это сделано специально для того, чтобы можно было перемещать камеры, используя группы.Обратитесь к демонстрации Egg Breaker, чтобы понять, что я имею в виду.Вся сцена находится в группе, которая перемещается, но объекты внутри группы не реагируют на перемещение группы.

Кстати, причина, по которой последняя строка выдает ошибку, заключается в том, что вы можете использовать applyForce только дляфизическое тело, и вы не установили физическое тело на "объект", только на "красный" и "синий".

...