[英]pygame "move_ip" method seems not working
我正在做一個簡單的腳本,使用 pygame,它只是移動一個矩形,但方法“move_ip”似乎沒有做任何事情(我遵循了 RealPython 教程中的代碼: https://realpython.com/pygame-a-底漆/ )。
綜上,我得到了一個class播放器,如下:
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.surf = pygame.Surface((75, 25))
self.surf.fill((255, 255, 255))
self.rect = self.surf.get_rect()
def update(self, pressed_k):
if pressed_k[K_UP]:
self.rect.move_ip(0, -5)
if pressed_k[K_DOWN]:
self.rect.move_ip(0, 5)
if pressed_k[K_LEFT]:
self.rect.move_ip(-5, 0)
if pressed_k[K_RIGHT]:
self.rect.move_ip(5, 0)
然后我得到了前面描述的 class 的實例“播放器”,它在循環中使用,如下所示:
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.type == QUIT:
running = False
pressed_keys = pygame.key.get_pressed()
player.update(pressed_keys)
screen.fill((0, 0, 0))
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
pygame.display.flip()
當我運行代碼時,它會正確創建 windows(顯示一個白色矩形,代表播放器),並且似乎程序讀取了鍵盤輸入,但代表播放器的塊沒有任何動作。
(實例method.update被正確調用,各種'if'語句也正常工作,但親戚'self.rect.move_ip'不會對播放器的position做任何改變)
玩家一直在(SCREEN_WIDTH/2, SCREEN_HEIGHT/2)
處繪制
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
您必須將播放器拖到存儲在rect
屬性中的 position 上。 pygame.Surface.blit)
的第二個參數可以是一個矩形。 在這種情況下,矩形的左上角將用作 blit 的 position:
screen.blit(player.surf, player.rect)
但是,如果您使用的是pygame.sprite.Sprite
那么您也應該使用pygame.sprite.Group
:
player_group = pygame.sprite.Group(player)
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.type == QUIT:
running = False
pressed_keys = pygame.key.get_pressed()
player_group.update(pressed_keys)
screen.fill((0, 0, 0))
player_group.draw(screen)
pygame.display.flip()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.