【发布时间】:2013-04-29 21:54:56
【问题描述】:
我正在用 Pygame 写一个小海盗游戏。如果你在《帝国全面战争》中玩过海战,你就会知道我想要实现的目标:
船的精灵位于(x1|y1)。玩家现在点击屏幕上的(x2|y2)。精灵现在应该将(x2|y2) 作为它的新位置 - 一步一步地去那里,而不是立即在那里发光。
我发现它与矩形的对角线有关 (x1|y1),(x1|y2),(x2|y2),(x2|y1) 但我就是想不通,尤其是与保持速度无关无论对角线的角度如何,并且考虑到任一(ship 或 click)的 x 和 y 值可能比另一个更大或更小,都相同。
这个小sn-p是我最后一次尝试写一个工作函数:
def update(self, new_x, new_y, speed, screen, clicked):
if clicked:
self.xshift = (self.x - new_x)
self.yshift = ((self.y - new_y) / (self.x - new_x))
if self.x > (new_x + 10):
self.x -= 1
self.y -= self.yshift
elif self.x > new_x and self.x < (new_x + 10):
self.x -= 1
self.y -= self.yshift
elif self.x < (new_x - 10):
self.x += 1
self.y += self.yshift
elif self.x < new_x and self.x < (new_x - 10):
self.x += 1
self.y += self.yshift
else:
self.x += 0
self.y += 0
screen.set_at((self.x, self.y), (255, 0, 255))
“船”在这里只是一个粉红色的像素。它在我点击屏幕时显示的反应是粗略地朝着我点击的方向移动,但在我点击的点的看似随机的距离处停止。
变量是:
new_x, new_y = 鼠标点击位置speed = 恒定速度取决于船型clicked = 由MOUSEBUTTONDOWN 事件设置true,以确保xshift和 self 的 yshift 仅在玩家单击时定义,而不是在每一帧再次定义。
如何让飞船从当前位置平稳移动到玩家点击的位置?
【问题讨论】: