Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 如何更改Love2D中每帧的速度?_Lua_Love2d - Fatal编程技术网

Lua 如何更改Love2D中每帧的速度?

Lua 如何更改Love2D中每帧的速度?,lua,love2d,Lua,Love2d,我正在尝试使用框架Love2D和一些额外的功能在Lua上编写一个乒乓球游戏。除此之外,我希望出现曲线。为了做到这一点,我试图实现水平发射的投射物的轨迹。我有一个球桌,它的位置属性是x(ball.x),另一个是y(ball.y)。一、 此外,还有一个用于x速度(ball.dx)的属性和另一个用于y速度(ball.dy)的属性。最后,我有一个加速度变量(重力) 在我的游戏中,如果球拍移动,球击中它,球应该沿着水平曲线移动。为了创建曲线,我想更改每帧上的y轴速度,以便使球在屏幕上以弧形移动。我遇到的主

我正在尝试使用框架Love2D和一些额外的功能在Lua上编写一个乒乓球游戏。除此之外,我希望出现曲线。为了做到这一点,我试图实现水平发射的投射物的轨迹。我有一个球桌,它的位置属性是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
如果love.keyboard.isDown(“向上”)和(ball.x,ball.y,player.x,player.y)之间的距离>30那么
ball.dy=0

而碰撞检测器(ball.x,player2.x,ball.y,player2.y,player2.width,player2.height,ball.size)=false或ball.x>0或ball.y-20>0或ball.y+20我相信您提供的代码片段是
love.update
函数的一部分。(至少应该是这样。)该函数应该一次执行游戏的一个步骤,然后返回。它不应该在一次呼叫中处理整个航班

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

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

在您的代码中,还有许多其他的设计缺陷,使它无法达到您认为它应该达到的效果。有些函数和代码部分由您自己实现,代码大纲如下所示:

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嗨,如果答案对你有用,你应该把它标记为正确的