首页 > 解决方案 > 如何使对象出现在窗口边界的开头(或结尾)(使用pygame)

问题描述

所以我试图在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

也有人可以告诉我如何让另一边的部分出现在另一边(矩形不应该立即改变位置,以便过渡更平滑)谢谢您的任何提示或回答

标签: pythonpygame

解决方案


不检查坐标是等于 ( ==) 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

推荐阅读