Corona SDK物理 - 在特定方向上施加力?

时间:2011-05-25 13:04:40

标签: lua physics game-physics corona

我是Corona的新手,作为一个学习练习,我正在使用Corona SDK物理引擎创建一个简单的“keepie uppie”游戏(http://en.wikipedia.org/wiki/Keepie_uppie)。

我的所有方面都正常工作,除了“踢”球运动。我正在通过applyLenearImpulse方法使用触摸事件“开始”阶段来应用踢。

我的问题是球通常表现得好像是从上方施加力,导致它射向游戏环境的地板。尽管在球上的接触点处施加了力。

我提出了以下解决方法:

function ball:touch( event ) 

     -- only allow taps in bottom half of ball
     if ( event.y > ball.y and event.phase == "began" ) then

         -- temporarily move floor to just below ball
         floor.y = ball.y + ballSize

         local flipx = 0

         if(event.x > ball.x) then
             flipx = event.x - ballSize
         elseif(event.x < ball.x) then
             flipx = event.x + ballSize
         else
             flipx = event.x
         end

         ball:applyLinearImpulse( 0, kickForce, flipx, event.y)

     end
end

上述工作方法是在施加力之前暂时将地板位置移动到正下方(然后通过enterFrame事件监听器将地板移回正确的位置)。

我还发现,通过这个解决方案,我不得不翻转事件触摸的x位置,否则它会在预期方向上水平反弹。

以上显然不理想。我应该在施加力之前停止球运动,如果是的话,怎么做?或者我完全采取了错误的做法?

2 个答案:

答案 0 :(得分:1)

applyLinearImpulse是您要用于此的命令,但在您的所有解决方法中,您没有提到我将尝试的第一个调整:反转所施加的力的方向。您发布的代码并没有告诉我们“kickForce”的价值;你试过否定这个吗?

答案 1 :(得分:0)

physics = require( "physics" )
physics.start()
physics.setGravity( 0, 9.8 )

ball = display.newCircle(400,100,100,100)
physics.addBody(ball)

function ballf(event)
    if event.phase == "ended" then
       vx, vy = ball:getLinearVelocity()
       ball:setLinearVelocity( -vx, -vy )
    end
end

ball:addEventListener("touch", ballf)

是一种在点击时“反弹”球的简单方法。

它的作用:

function ballf(event)
        if event.phase == "ended" then
           vx, vy = ball:getLinearVelocity()
           ball:setLinearVelocity( -vx, -vy )
        end
    end

如果点击事件结束,它将获取当前球的线速度并反转它。

我不知道你的代码在做什么(无法​​看到如何运行它。)所以我在一分钟内做到了这一点:)

爱日冕不到一周<3