使用clamp_ip()保持精灵在窗口内

-1 投票
2 回答
1033 浏览
提问于 2025-04-18 09:16

我正在尝试使用 clamp_ip() 这个函数来确保我的角色精灵在一个600 x 315的屏幕上不超出边界,但它似乎没有效果。

ship = pygame.image.load("ship.png")
ship_top = screen.get_width() - ship.get_width()
ship_left = screen.get_height()/2 - ship.get_height()/2

while True:
    clock.tick(60)
    keys = pygame.key.get_pressed()
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    if keys[pygame.K_LEFT]:
        ship_left = ship_left - 6
    elif keys[pygame.K_RIGHT]:
        ship_left = ship_left + 6

    screen.blit(back, (x,0))
    screen.blit(back2,(x-screenWidth,0))
    screen.blit(ship, (ship_top, ship_left))

    screen_rect = pygame.Rect((0, 0), (600, 315))

    def moveme(ship,ship_top,ship_left):
       ship.rect.move_ip((ship_top,ship_left))
       ship.rect.clamp_ip(screen_rect)

2 个回答

0

要使用 clamp_ip,你需要先处理一个 Rect(矩形):

ship = pygame.image.load("ship.png")
ship_top = screen.get_width() - ship.get_width()
ship_left = screen.get_height()/2 - ship.get_height()/2
ship_r = ship.get_rect(top=ship_top, left=ship_left)

然后你可以在你的主循环中使用 Rect 的方法:

if keys[pygame.K_LEFT]:
    ship_r.move_ip(-6, 0)
elif keys[pygame.K_RIGHT]:
    ship_r.move_ip(6, 0)

ship_r.clamp_ip(screen_rect)

screen.blit(back, (x,0))
screen.blit(back2,(x-screenWidth,0))
screen.blit(ship, ship_r)
0

你从来没有调用过 moveme;你不是用矩形来处理,而是直接操作那个没有限制的变量 ship_left

撰写回答