我有一个Paddle
类,其中move
方法可以读取一些键盘输入:
def move(self, dt):
keys = pygame.key.get_pressed()
if keys[K_LEFT]: return -self.speed * dt
elif keys[K_RIGHT]: return self.speed * dt
return 0
在另一个程序中使用相同的类,它在那里工作正常。我根本不知道为什么会这样。真正奇怪的是,当程序从Eclipse或IDLE运行时,会检测到按键,但是直接从文件运行时没有任何反应。另外,我最近添加的代码使得球在移动之前等待一段时间,并且它在Eclipse中运行,但是直接从.py文件运行时不会。
def update(self, dt):
if self.on_paddle:
self.rect.centerx = self.paddle.rect.centerx
self.time_passed += dt
if self.time_passed > 3:
self.on_paddle = False
else:
self.rect = self.calcnewpos(dt)
self.handle_collision()
为什么会这样?为什么它从eclipse运行而不是从文件运行? Here是主要内容。
更新
我意识到我的game.py
文件是主文件(运行的文件),会自动为所有导入的模块创建 .pyc 文件。但是在另一个游戏中(也有objects.py
个文件,其中包含Ball
和Paddle
类),不会生成 .pyc 文件,并且会在Paddle的更新方法正确处理。
我尝试删除所有 .pyc 文件并添加sys.dont_write_bytecode = True
以防止它们被自动生成但这也没有帮助。虽然 .pyc 文件不再显示,但程序的行为方式与之前相同。
想法:可能是因为我正在使用pygame或同名的内置模块遮蔽模块吗?或者相反?到目前为止,我在项目文件夹中有以下模块:
constants.py
frame.py
game.py
helper.py
level.py
menu.py
music.py
objects.py
stats.py
text.py
vec2d.py
答案 0 :(得分:0)
事实证明,解决方案非常令人尴尬。在游戏的主循环中,我正在计算dt
(自上次以来的时间),就像这样:
dt = clock.tick(FPS) / 1000
因此它被截断为0,因为clock.tick
返回的值是一个浮点数,因为划桨和球需要dt
,所以它们不会移动。我仍然不明白为什么dt = clock.tick(FPS) / 1000
在我的其他游戏中工作正常。