我的程序是Pong的一种实现,其中一个球拍由计算机移动,另一个由用户移动。
该程序运行良好,人工智能为了逼真而出现错误。然而,我的球拍在屏幕上的移动断断续续,似乎跳过了一两帧。
该程序在Lua(+Love2D(。
function Paddle:comp_move(dt)
error = math.random(3) == 2 and true or false
start_time = os.time()
diff = 0
if ball:collides(self) == false then
if ball.y > self.y + self.height then -- Ball is below paddle
-- Ball is moving up and difference is more than 20 pixels
if ball.dy < 0 and (ball.y - self.y - self.height) > 20 then
-- move down
if error == false then
diff = os.difftime(os.time() - start_time)
self.y = math.min(VIRTUAL_HEIGHT - 20, self.y + PADDLE_SPEED*(dt))
end
end
-- Ball is moving down
if ball.dy > 0 then
-- move down
if error == false then
diff = os.difftime(os.time() - start_time)
self.y = math.min(VIRTUAL_HEIGHT - 20, self.y + PADDLE_SPEED*(dt))
end
end
elseif ball.y + ball.height < self.y then -- Ball is above paddle
-- Ball is moving down
if ball.dy > 0 and (self.y - ball.y - ball.height) > 20 then
-- move up
if error == false then
diff = os.difftime(os.time() - start_time)
self.y = math.max(0,self.y - PADDLE_SPEED*(dt))
end
elseif ball.dy < 0 then -- Ball is moving up
-- move up
if error == false then
diff = os.difftime(os.time() - start_time)
self.y = math.max(0,self.y - PADDLE_SPEED*(dt))
end
end
end
end
我正在计算电脑计算所需的时间,但我应该用它做什么操作来规范我的球拍运动。
从您的代码来看,划桨速度似乎是恒定的;用一个功能来代替它可能是一个想法,这样桨一开始移动得更慢,然后加速,然后在到达所需位置时再次减速。
这将使它在运动行为方面更加现实,也可能解决你的口吃问题。
常数PADDLE_SPEED
需要替换为某个函数,该函数需要一步并在适当的时间返回一个值(可能在0.0和PADDLE_SPEED之间(。