首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试调用方法'applyForce‘(一个零值)

尝试调用方法'applyForce‘(一个零值)
EN

Stack Overflow用户
提问于 2014-11-27 03:16:47
回答 3查看 2.3K关注 0票数 0
代码语言:javascript
复制
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。

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2014-11-27 13:20:54

您知道吗,在您触摸屏幕之前,spawnRBird是被调用的?该消息还指出,rBird不是零,而是applyForce不是rBird上的一个方法。这意味着rBird已经被从物理中删除,或者作为显示对象被删除(这并不使其为零,只是从其中删除了某些方法)。

如果这并不能帮助您找到问题,那么您将不得不按您拥有的文件而不是仅仅部分发布该文件。

票数 0
EN

Stack Overflow用户

发布于 2014-11-27 21:37:49

发生此错误是因为调用函数时rBird不是物理对象。

spawnBird函数中,您正在初始化rBird并将其添加到物理中。您正在声明rBird是一个全局变量。这通常是一种糟糕的编程实践,不应该进行调整,因为它可能会导致内存泄漏。

您可以将函数中的rBird初始化为局部变量,并在场景/当前文件中使用局部变量以避免使用全局变量。在物理中添加变量后,设置与rBird相同的变量,这样跳转函数就不会返回错误。这也将帮助您确保要显示对象的变量在添加到物理引擎后被使用。

代码语言:javascript
复制
-- 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对象。

代码语言:javascript
复制
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 )
票数 0
EN

Stack Overflow用户

发布于 2016-02-18 22:48:16

确保你已经开始了物理研究:

代码语言:javascript
复制
physics.start();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27162515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档