我使用Tkinter编写了一个python版本的Asteroids(https://en.wikipedia.org/wiki/Asteroids_(video_game))。
这是让船舶继续前进的代码:
def move(self, sx=0, sy=0, ms=2):
try:
self.root.after_cancel(self.m)
except AttributeError:
pass
ms += 1
if ms > 30:
return
self.parent.move(self.ship, sx, sy)
self.m = self.root.after(ms, lambda sx1=sx, sy1=sy, millisec=ms: self.move(sx1, sy1, ms))
这里有按下向上箭头时运行的实际功能:
def avanti(self, event):
self.s = -2.5
x = self.s * math.sin(math.radians(self.angle)) * -1
y = self.s * math.cos(math.radians(self.angle))
self.move(x, y)
当你多次按下UpArrow时,代码效果很好,唯一的问题是,当你按住它时,船只会移动一次,然后会有一个像0.2s一样的小突破,然后开始运行定期提前,直到你释放钥匙。我认为计算机会阻止你双击它然后,当它看到你真正想要的时候,它会消除这种预防。
首次按下后是否有办法删除此块?
编辑:你可以通过进入键盘 - >实际上改变整个计算的输入延迟。键入延迟但我想要做的是删除python程序上的延迟 。
答案 0 :(得分:1)
您可以使用<Up>
设置move_up = True
和<KeyRelease-Up>
设置move_up = False
,然后您可以使用after
运行将检查{{1}的函数移动对象。
工作示例 - 来自其他问题的代码(关于移动平台)
move_up