【问题标题】:attempt to call method 'applyForce'尝试调用方法“applyForce”
【发布时间】:2019-02-05 18:11:14
【问题描述】:

我正在制作一个横向滚动条,当我开始游戏时,我可以触摸屏幕以让我的企鹅保持在空中,但是当我失败并与冰块碰撞并在重新启动后按播放键时,我得到了错误尝试调用方法“applyForce” 这是我的代码

local function activatePengs(self,event)

    self:applyForce(0, -45, self.x, self.y)

    print("run")

end

local function touchScreen(event)

    print("touch")

    if event.phase == "began" then

        peng.enterFrame = activatePengs
        Runtime:addEventListener("enterFrame", peng)

    end

    if event.phase == "ended" then

        Runtime:removeEventListener("enterFrame", peng)

    end

end


local function onCollision(event)

    if event.phase == "began" then

        print "collide"

        composer.gotoScene( "restart",{ time=800, effect="crossFade" } )

    end

end

-- now comes four required functions for Composer:

function scene:create( event )

    local sceneGroup = self.view

    bg1 = display.newImageRect(sceneGroup, "bg.png", 800, 1000)

    bg2 = display.newImage(sceneGroup, "ice2.png",140,210)

    bg3 = display.newImage(sceneGroup, "ice2.png",540,210)

    bg4 = display.newImage(sceneGroup, "ice2.png",940,210)

    bg5 = display.newImage(sceneGroup, "ice2.png",1340,210)

    bg6 = display.newImage(sceneGroup, "ice2.png",1740,210)

    bg7 = display.newImage(sceneGroup, "ice1.png",140,420)

    bg8 = display.newImage(sceneGroup, "ice1.png",540,420)

    bg9 = display.newImage(sceneGroup, "ice1.png",940,420)

    bg10 = display.newImage(sceneGroup, "ice1.png",1340,420)

    bg11 = display.newImage(sceneGroup, "ice1.png",1740,420)

    peng = display.newImage(sceneGroup, "peng.png", 80, 201)
    physics.addBody(peng, "dynamic", {density=.18, bounce=0.1, friction=.5, radius=55})
    ...
end

【问题讨论】:

    标签: android lua sdk coronasdk side-scroller


    【解决方案1】:

    这个错误可能是因为函数被调用时企鹅不是物理对象。我认为在进入下一个场景之前删除 enterFrame 侦听器应该可以解决您的问题。

    我对您的代码添加了一些改进(未经测试):

    local applyForceToPenguin = false 
    
    local function enterFrame( self, event )
    
        if applyForceToPenguin then
    
            self:applyForce( 0, -45, self.x, self.y )
    
            print("run")
    
        end
    
    end
    
    local function touchScreen(event)
    
        print("touch")
    
        if event.phase == "began" then applyForceToPenguin = true end
    
        if event.phase == "ended" then applyForceToPenguin = false end
    
    end
    
    
    local function onCollision(event)
    
        if event.phase == "began" then
    
            print "collide"
    
            applyForceToPenguin = false
    
            composer.gotoScene( "restart",{ time=800, effect="crossFade" } )
    
        end
    
    end
    
    -- now comes four required functions for Composer:
    
    function scene:create( event )
    
        local sceneGroup = self.view
    
        bg1  = display.newImageRect( sceneGroup, "bg.png", 800, 1000 )
        bg2  = display.newImage( sceneGroup, "ice2.png", 140, 210 )
        bg3  = display.newImage( sceneGroup, "ice2.png", 540, 210 )
        bg4  = display.newImage( sceneGroup, "ice2.png", 940, 210 )
        bg5  = display.newImage( sceneGroup, "ice2.png", 1340, 210 )
        bg6  = display.newImage( sceneGroup, "ice2.png", 1740, 210 )
        bg7  = display.newImage( sceneGroup, "ice1.png", 140, 420 )
        bg8  = display.newImage( sceneGroup, "ice1.png", 540, 420 )
        bg9  = display.newImage( sceneGroup, "ice1.png", 940, 420 )
        bg10 = display.newImage( sceneGroup, "ice1.png", 1340, 420 )
        bg11 = display.newImage( sceneGroup, "ice1.png", 1740, 420 )
    
        peng = display.newImage( sceneGroup, "peng.png", 80, 201)
        physics.addBody( peng, "dynamic", { density=.18, bounce=0.1, friction=.5, radius=55 } )
        Runtime:addEventListener( "enterFrame", enterFrame )
        ...
    end
    
    function scene:destroy()
    
        Runtime:removeEventListener( "enterFrame", enterFrame )
    
    end
    
    function scene:hide( event )
        local sceneGroup = self.view
        local phase = event.phase
    
        if phase == "will" then
            -- Code here runs when the scene is still off screen (but is about to come on screen)
    
        elseif phase == "did" then
            -- Code here runs when the scene is entirely on screen
            applyForceToPenguin = false
        end    
    
    end
    
    scene:addEventListener( "hide", scene )
    scene:addEventListener( "destroy", scene )
    

    祝你有美好的一天:)

    【讨论】:

    • 我尝试过,但我仍然遇到同样的错误,我也感谢您的回复,我已经为此工作了数周
    猜你喜欢
    • 2015-01-25
    • 2014-03-26
    • 2017-01-06
    • 2017-05-07
    • 1970-01-01
    • 2021-06-07
    • 2017-10-04
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多