這是我的代碼:爲什麼矩形不移動?
import pygame
from pygame.locals import *
#define the player
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.surf = pygame.Surface((50, 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)
#keep player on the screen
if self.rect.left < 0:
self.rect.left = 0
elif self.rect.right > 400:
self.rect.right = 400
#initialization
pygame.init()
#create the screen object
screen = pygame.display.set_mode((400, 600))
#instantiate the player
player = Player()
running = True
#main loop
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
#draw the player to the screen
screen.blit(player.surf, (200, 550))
pressed_keys = pygame.key.get_pressed()
player.update(pressed_keys)
#update the display
pygame.display.flip()
一切都顯示了,但事先我不能用我的箭頭鍵移動矩形沒有任何錯誤顯示,幫助..謝謝!我還添加了一個打印來檢查pressed的按鍵是否工作,並在不移動矩形的情況下打印。
非常感謝。不好意思,我該如何確定玩家的位置?再次感謝你。 – Entel
要初始設置精靈位置,請將'self.rect = self.surf.get_rect()'替換爲'self.rect = self.surf.get_rect(center =(100,100))'。用'(x,y)'替換元組,''中心'參數可以替換爲'topleft','topright','top','bottom' ...你可以在這裏找到它們:https ://www.pygame.org/docs/ref/rect.html#pygame.Rect。之後,您可以使用'self.rect.move(x,y)'將精靈移動到'x'和'y'線。或者是任何組合:'self.rect.right = 10'或'self.rect.top = 100' ... – abccd
'您不應該在每個循環中顯式使用pygame.key.get_pressed()來檢查按鍵,它會讓你的代碼變得更慢,並且可能會滯後 - 這是無稽之談。它不會使代碼變慢。 'pygame.key.get_pressed()'是檢索密鑰狀態的正確方法。使用你的代碼,你不能再按住鍵來獲得連續的移動。 '設置一個幀速率,這樣不會消耗太多內存' - 這也是無稽之談。你設置一個幀速率,讓你的遊戲以恆定的速度運行。這與RAM無關...... – sloth