<p>我相信问题的一部分是你只更新了<code>left</code>中的<code>self.rect</code>。尝试同时更新<code>left</code>和{<cd4>},看看这是否会改变事情。在</p>
<p>更重要的是,这段代码有点难读,而且你要做的事情也太复杂了。在<code>update</code>函数中而不是在键事件处理程序中检查屏幕边界,可能会更好地为您服务。实际上,这是游戏物理的一部分,所以它应该挂在那里。在</p>
<p>换句话说,使用事件循环来设置表示播放器意图的标志到<code>update</code>函数。使用<code>update</code>函数根据事件循环设置的标志将游戏规则(物理等)应用于游戏状态。在</p>
<p>也许像这样?在</p>
<pre><code>while True:
...
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_RIGHT:
player.goright = True
if event.key == K_LEFT:
player.goleft = True
if event.type == KEYUP:
if event.key == K_RIGHT:
player.goright = False
if event.key == K_LEFT:
player.goleft = False
players.update()
players.draw(SCREEN)
pygame.display.update()
clock.tick(FPS)
def update(self):
if self.goright and self.speed < SPEED_MAX:
self.speed += ACCEL_INCREMENT
if self.goright and self.speed > -SPEED_MAX:
self.speed -= ACCEL_INCREMENT
new_left_pos = self.rect.left + self.speed
new_right_pos = self.rect.right + self.speed
if new_left_pos > 0 and new_right_pos < 1024:
self.rect.left += self.speed
self.rect.right += self.speed
</code></pre>