使用clamp_ip()保持精灵在窗口内
我正在尝试使用 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
。