[英]I am not able to move my sprite around in my pygame
In this code, I am starting out by trying to make a sprite named "player" move across the screen.在这段代码中,我首先尝试使名为“玩家”的精灵在屏幕上移动。 It does not move at all.
它根本不动。 I looked at other questions regarding the same problem, but they mostly had problems that were because of things like not doing a main loop.
我查看了有关同一问题的其他问题,但他们的问题大多是由于未执行主循环之类的问题。 Here is the code.
这是代码。
import pygame
from pygame.locals import (
K_UP,
K_DOWN,
K_LEFT,
K_RIGHT,
KEYDOWN,
QUIT,
)
print('Use the window above to play')
pygame.init()
clock = pygame.time.Clock()
display_width = 800
display_height = 600
screen = pygame.display.set_mode((display_width,display_height))
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.surf = pygame.Surface((75, 25))
self.surf.fill((0, 0, 0))
self.rect = self.surf.get_rect()
player = Player()
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)
alive = True
while alive:
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
alive = False
pressed_keys = pygame.key.get_pressed()
player.update(pressed_keys)
screen.fill((200,200,200))
screen.blit(player.surf, (display_height/6, display_width/2))
pygame.display.flip()
pygame.display.update()
clock.tick(60)
update
is a method of Player
. update
是Player
一个方法。 Fix the Indentation .修复缩进。 Create the instance of
palyer
after the class. palyer
创建palyer
实例。
You have to draw the player at player.rect
rather than (display_height/6, display_width/2)
:你必须在
player.rect
绘制玩家而不是(display_height/6, display_width/2)
:
screen.blit(player.surf, (display_height/6, display_width/2))
screen.blit(player.surf, player.rect)
(display_height/6, display_width/2)
is the intitial position of the palyer: (display_height/6, display_width/2)
是播放器的初始位置:
class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
# [...]
self.rect = self.surf.get_rect(topleft = (x, y))
player = Player(display_width // 2, display_height // 2)
See the complete example:查看完整示例:
import pygame
from pygame.locals import (
K_UP,
K_DOWN,
K_LEFT,
K_RIGHT,
KEYDOWN,
QUIT,
)
print('Use the window above to play')
pygame.init()
clock = pygame.time.Clock()
display_width = 800
display_height = 600
screen = pygame.display.set_mode((display_width,display_height))
class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
super(Player, self).__init__()
self.surf = pygame.Surface((75, 25))
self.surf.fill((0, 0, 0))
self.rect = self.surf.get_rect(topleft = (x, y))
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)
player = Player(display_width // 2, display_height // 2)
alive = True
while alive:
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
alive = False
pressed_keys = pygame.key.get_pressed()
player.update(pressed_keys)
screen.fill((200,200,200))
screen.blit(player.surf, player.rect)
pygame.display.flip()
pygame.display.update()
clock.tick(60)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.