function spawnRBird( x,y )
print("\n entered into spawnred");
rBird = display.newSprite (sheet, seqData);
rBird.x = x;
rBird.y = y;
rBird:setSequence("rBird")
rBird.anchorX = 0;
rBird.anchorY = 1;
physics.addBody(rBird, "dynamic", {density=1, bounce=0.5, friction=0.5})
rBird:play();
rBird:addEventListener( "collision", birdCollision );
我得到了:
尝试调用方法'applyForce'(零值)
当我在rBird
内生成红鸟rBirdJump
对象后点击屏幕变为零时请在电晕lua中解释
function rBirdJump( event )
if (event.phase == "began") then
rBird:applyForce(0, -50, redBird.x, redBird.y)
rBird:setLinearVelocity( 0, -10 )
rBird.isFixedRotation = true;
end
end
Runtime:addEventListener("touch", rBirdJump);
--timer.performWithDelay( 1000, function Runtime:addEventListener("touch", rBirdJump) end, 1 )
end
答案 0 :(得分:0)
您是否知道在触摸屏幕之前调用spawnRBird
的事实?此外,该消息表明rBird
不是零,但applyForce
不是rBird
上的方法。这意味着rBird在生成后已从物理中移除,或作为显示对象移除(不会使其成为零,只是从中删除某些方法)。
如果这不能帮助您找到问题,则必须按原样发布文件,而不仅仅是部分文件。
答案 1 :(得分:0)
发生错误是因为 rBird 在调用函数时不是物理对象。
在 spawnBird 函数中,您正在初始化rBird并将其添加到物理中。您声明rBird是一个全局变量。这通常是一个糟糕的编程习惯,不应该进行调整,因为它可能会导致主要的内存泄漏。
-- forward reference to your created redBird. Initialize as nil to make sure the variable is assigned a value after its added in physics.
local redBird = nil
function spawnRBird( x,y )
print("\n entered into spawnred");
local rBird = display.newSprite (sheet, seqData);
rBird.x = x;
rBird.y = y;
rBird:setSequence("rBird")
rBird.anchorX = 0;
rBird.anchorY = 1;
physics.addBody(rBird, "dynamic", {density=1, bounce=0.5, friction=0.5})
redBird = rBird
rBird:play();
rBird:addEventListener( "collision", birdCollision );
通过在后面的代码中使用变量redBird,您可以确保使用的是phusics对象,因为在物理中添加它后为其赋值。
function rBirdJump( event )
if (event.phase == "began" and redBird ~= nil) then
redBird:applyForce(0, -50, redBird.x, redBird.y)
redBird:setLinearVelocity( 0, -10 )
redBird.isFixedRotation = true;
end
end
Runtime:addEventListener("touch", rBirdJump);
--timer.performWithDelay( 1000, function Runtime:addEventListener("touch", rBirdJump) end, 1 )
答案 2 :(得分:0)
确保你已经开始了物理学:
physics.start();