我刚刚开始使用Corona SDK,而且我在移动平台上应用物理时遇到了一些问题。
基本上我有一个从右到左移动的平台,当一个物体落在平台上没有摩擦时,物体无法随平台移动,所以一旦平台从物体下方移动,物体就会落到屏幕的底部。还有其他人有这个问题吗?我想也许物理对象失去了一些属性,但我不知道哪一个。
我希望物体可以随平台移动,方向和速度相同。
这是一个代码示例:
.....
elements = display.newGroup()
elements.anchorChildren = true
elements.anchorX = 0
elements.anchorY = 1
elements.x = 0
elements.y = 0
screenGroup:insert(elements)
player = display.newImageRect("player.png",30,50)
player.anchorX = 50
player.anchorY = 50
player.x = 80
player.y = display.viewableContentHeight - 80
physics.addBody(player, "static", {density=.1, bounce=0.1, friction=1.0})
player:setLinearVelocity( 100, -600 )
screenGroup:insert(player)
.....
....
local gameStarted = false
function jumptoplatform(event)
if event.phase == "began" then
if gameStarted == false then
player.bodyType = "dynamic"
addplatformsTimer = timer.performWithDelay(1000, addplatforms, -1)
moveplatformsTimer = timer.performWithDelay(2, moveplatforms, -1)
gameStarted = true
player:setLinearVelocity( 100, -600 )
else
player:setLinearVelocity( 100, -600 )
end
end
end
function moveplatforms()
for a = elements.numChildren,1,-1 do
if(elements[a].x > -150) then
elements[a].x = elements[a].x - 6
else
elements:remove(elements[a])
end
end
end
function addplatforms()
platform1 = display.newImageRect("platform.png",200,80)
platform1.anchorX = 0
platform1.anchorY = 1
platform1.x = 450
platform1.y = yPosition()
physics.addBody(platform1, "static", {density=1, bounce=0.1, friction=1.0})
elements:insert(platform1)
end
.....
也许我必须添加一个onCollision
函数来处理它?或者使用关节?任何想法将不胜感激..
答案 0 :(得分:1)
当你创建一个物理体时,“静态”体型意味着物体不会在模拟下移动,它们的行为就像它们具有无限质量一样。静态物体可以由用户手动移动,但它们不接受速度的应用。静态物体仅与动态物体碰撞,而不与其他静态物体或运动物体碰撞。 (这里有更多细节:http://docs.coronalabs.com/api/type/Body/bodyType.html)
试试这样:
physics.addBody(player, "dynamic", {density=.1, bounce=0.1, friction=1.0})