所以我尝试在pygame中使用一些简单的动画和碰撞。我试图让一个矩形在离开边界后出现在开始(或结束(,但即使我的方法在处理y坐标时有效,它在处理x轴时也会失败。但是我不太明白为什么。
这段代码可能会给带来麻烦
def movement():
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_a]:
red_rect.x -= vel
if keys_pressed[pygame.K_d]:
red_rect.x += vel
if keys_pressed[pygame.K_w]:
red_rect.y -= vel
if keys_pressed[pygame.K_s]:
red_rect.y += vel
if (red_rect.x) == 600:
red_rect.x = 0
if red_rect.x == 0:
red_rect.x = 600
if red_rect.y == 600:
red_rect.y = 0
if red_rect.y == -40:
red_rect.y = 600
还有人能告诉我如何在另一侧显示另一个边界之外的部分吗(矩形不应该立即改变位置,这样过渡更平滑(感谢您的任何提示或回答
不要检查坐标是否等于(==
(0或600,而是检查坐标是否为<
0或>=
600:
if (red_rect.x) >= 600:
red_rect.x = 0
if red_rect.x < 0:
red_rect.x = 600
if red_rect.y >= 600:
red_rect.y = 0
if red_rect.y < 0:
red_rect.y = 600
您的代码可以大大简化。pygame.key.get_pressed()
返回一个0和1的数组。使用这些值来计算移动。使用模(%
(运算符计算位置:
def movement():
keys_pressed = pygame.key.get_pressed()
red_rect.x += (keys_pressed[pygame.K_d] - keys_pressed[pygame.K_a]) * vel
red_rect.y += (keys_pressed[pygame.K_s] - keys_pressed[pygame.K_w]) * vel
width, height = 600, 600
red_rect.x = red_rect.x % width
red_rect.y = red_rect.y % height