[英]Difference between rect.move() and rect.move_ip in pygame
[英]pygame sprite not moving with self.rect.move_ip
我正在 pygame 中開發一款游戲,我已經在屏幕上繪制了基本繪圖,但用戶輸入讓我感到困惑。 我有一個播放器 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_keys):
if pressed_keys[K_UP]:
self.rect.move_ip(0, -5)
if pressed_keys[K_DOWN]:
self.rect.move_ip(0, 5)
if pressed_keys[K_LEFT]:
self.rect.move_ip(-5, 0)
if pressed_keys[K_RIGHT]:
self.rect.move_ip(5, 0)
pygame.event.pump()
但是每當我按下按鍵時,什么都沒有發生。 這是繪制內容的腳本的結尾:
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))
surf = pygame.Surface((50, 50))
surf.fill((0, 0, 0))
rect = surf.get_rect()
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
pygame.display.flip()
我不知道發生了什么,但我找不到任何關於此的解決方法。 一切都畫對了,但沒有別的。
您必須在存儲在rect
屬性中的 position 處對播放器進行blit
:
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
screen.blit(player.surf, player.rect)
來自blit(source, dest, area=None, special_flags=0)
上的文檔
在此 Surface 上繪制
source
Surface。 可以使用dest
參數定位平局。dest
參數可以是一對坐標,表示 blit 左上角的 position 或Rect
player
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.centered()
def update(self, pressed_keys):
if pressed_keys[K_UP]:
self.move(0, -5)
if pressed_keys[K_DOWN]:
self.move(0, 5)
if pressed_keys[K_LEFT]:
self.move(-5, 0)
if pressed_keys[K_RIGHT]:
self.move(5, 0)
pygame.event.pump()
def draw_on(surface):
surface.blit(self.surf, self.rect)
def move(x, y):
self.rect.move_ip(x,y)
def centered():
return self.surf.get_rect(center=(SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
注:為Player
添加了一些功能
move
用向量 (x,y) 移動玩家centered
position 為中心,在恆定的屏幕尺寸內draw_on
在給定的表面(如screen
)上繪制玩家精靈/表面閱讀有關如何使用get_rect()
居中的Surface
文檔:
您可以將關鍵字參數值傳遞給此 function。 這些命名值將在返回之前應用於 Rect 的屬性。 一個示例是
mysurf.get_rect(center=(100, 100))
為 Surface 創建一個以給定 position 為中心的矩形。
然后替換:
screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2))
經過:
# new player is centered, moved player not
player.draw_on(screen)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.