【问题标题】:How to change the velocity in each frame in Love2D?如何改变 Love2D 中每一帧的速度?
【发布时间】:2019-12-23 17:21:48
【问题描述】:

我正在尝试使用带有一些额外功能的框架 Love2D 在 Lua 上编写 Pong 游戏。其中,我希望出现曲线。为了做到这一点,我正在尝试实现水平发射的弹丸的轨迹。我有一个带有 x (ball.x) 的位置属性和 y (ball.y) 的位置属性的球桌。我也有一个用于 x 速度 (ball.dx) 的属性和另一个用于 y 速度 (ball.dy) 的属性。最后,我有一个加速度变量(重力)

在我的游戏中,如果球拍移动并且球击中它,球应该跟随水平曲线。为了创建我的曲线,我想改变每一帧的 y 轴速度,以使我的球在屏幕上沿弧线移动。我遇到的主要问题是我不知道如何在每一帧中更改此速度以创建预期的弧线。我最近的尝试是创建一个类似于以下代码的 while 循环。但是,它会创建一个无限循环。有人可以请教我吗?

澄清:

-Player.x 和 player.y 是玩家坐标

-Player2.x和Player2.y是对手坐标

-这段代码在另一个检测碰撞的 if 语句中。它在 love.update(dt) 函数中。

非常感谢!

if love.keyboard.isDown("up") and distanceBetween(ball.x,ball.y,player.x,player.y)>30 then
        ball.dy=0
        while CollisionDetector(ball.x,player2.x,ball.y,player2.y, player2.width,player2.height,ball.size)==false or ball.x>0 or ball.y-20>0 or ball.y+20<love.graphics.getHeight() do
          ball.dy=ball.dy+gravity*dt
          ball.y=ball.y+ball.dy
        end
end

【问题讨论】:

    标签: lua love2d


    【解决方案1】:

    我相信您提供的 sn-p 是 love.update 函数的一部分。 (至少应该如此。)该函数应该一次执行游戏的一个步骤并返回。它不应该在一个呼叫中处理整个航班。

    在您的特定情况下,while 循环期望球移动,但这在循环和包含函数结束之前不会发生。

    一般来说,要模拟正在进行的流程,您必须存储有关此类流程的信息。例如,如果您希望重力依赖于桨的运动方向,那么您必须修改相应的变量并将其存储在调用之间。

    在您的代码中,还有多个其他设计缺陷使其不符合您的想法。部分功能和代码部分需要自己实现,代码大纲如下:

    function collides(ball,player)
       return (ball.x,player.x,ball.y,player.y, player.width,player.height,ball.size)
    end
    function love.update(dt)
       handle_paddle_movements()
       --handle the ball-paddle interaction
       if collides(ball,player1) or collides(ball,player2) then 
         ball.dx=-ball.dx
         if love.keyboard.isDown("up") then 
           --store the info you need to know about the interaction
           ball.d2y = -gravity 
         else if love.keyboard.isDown("down")
           ball.d2y = gravity
         else 
           ball.d2y = 0
         end
       end
       handle_the_wall_collision()
       --ball movement code should be separate from collision handling
       --concrete equations can be whatever you want
       ball.x = ball.x+ball.dx*dt
       ball.dy = ball.dy + ball.d2y * dt
       ball.y = ball.y + ball.dy * dt
    end
    

    【讨论】:

    • 您好,谢谢您的回复,确实在love.update函数中。问题在于,使用 if 语句时,球只是减速,但似乎没有弯曲。有人可以请教我吗?
    • 我提供了如何解决问题的示例。
    • 很清楚,非常感谢!我更了解这个问题!
    • @LordGaga 嗨,如果它对你有用,你应该将答案标记为正确
    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多