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