Pygame 使用 pygame.Surface() 后 sprite 不会更新
Pygame sprite won't update after I use pygame.Surface()
我正在使用 pygame 制作一个简单的平台游戏,但我似乎无法弄清楚如何更新我的 sprite(目前它只是一个矩形)。每一个提示都将不胜感激。
这是我的代码:
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 50))
self.image.fill(WHITE)
self.rect = self.image.get_rect()
self.rect.center = (WIDTH / 2, HEIGHT / 2)
self.pos = vect(WIDTH / 2, HEIGHT / 2)
self.vel = vect(0, 0)
self.acc = vect(0, 0)
def update(self):
self.acc = vect(0, 0)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.acc.x = -0.5
if keys[pygame.K_RIGHT]:
self.acc.y = 0.5
self.vel += self.acc
self.pos += self.vel + 0.5 * self.acc
self.rect.center = self.pos
player = Player()
FPS = 40
RECT_WIDTH = 50
RECT_HEIGHT = 50
run = True
while run:
pygame.time.Clock().tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
screen.fill(LIGHT_PURPLE)
player.update()
pygame.display.flip()
我没有像颜色变量赋值那样把所有的东西都放在一起,但我很确定这里有错误
2 个选项:
A)。添加绘图功能并绘制精灵 -简单修复
B)。制作精灵组并绘制所有精灵 - 如果使用大量精灵则很好
绘图函数
def update(self):
self.acc = vect(0, 0)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.acc.x = -0.5
if keys[pygame.K_RIGHT]:
self.acc.y = 0.5
self.vel += self.acc
self.pos += self.vel + 0.5 * self.acc
self.rect.center = self.pos
self.draw() # draw the sprite
def draw(self):
screen.blit(self.image,self.rect)
精灵组:
Sprites = pygame.sprite.Group()
player = Player()
Sprites.add(player)
然后循环
Sprites.update() # calls the update function in every sprite
Sprites.draw(screen) # draws every sprite onto the screen
作为,使用群组来更新和绘制您所有的精灵。
这是一个基于您的代码的完整 运行 示例:
import pygame
pygame.init()
WHITE = pygame.Color('WHITE')
LIGHT_PURPLE = pygame.Color('PURPLE')
vect = pygame.Vector2
class Player(pygame.sprite.Sprite):
def __init__(self, screen_r):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 50))
self.image.fill(WHITE)
self.rect = self.image.get_rect()
self.rect.center = screen_r.center
self.pos = vect(self.rect.center)
self.vel = vect(0, 0)
self.acc = vect(0, 0)
def update(self):
self.acc = vect(0, 0)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.acc.x = -0.5
if keys[pygame.K_RIGHT]:
self.acc.x = 0.5
self.vel += self.acc
self.pos += self.vel + 0.5 * self.acc
self.rect.center = self.pos
screen = pygame.display.set_mode((800, 600))
screen_r = screen.get_rect()
player = Player(screen_r)
FPS = 60
RECT_WIDTH = 50
RECT_HEIGHT = 50
run = True
all_sprites = pygame.sprite.Group(player)
while run:
pygame.time.Clock().tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
all_sprites.update()
screen.fill(LIGHT_PURPLE)
all_sprites.draw(screen)
pygame.display.flip()
我正在使用 pygame 制作一个简单的平台游戏,但我似乎无法弄清楚如何更新我的 sprite(目前它只是一个矩形)。每一个提示都将不胜感激。
这是我的代码:
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 50))
self.image.fill(WHITE)
self.rect = self.image.get_rect()
self.rect.center = (WIDTH / 2, HEIGHT / 2)
self.pos = vect(WIDTH / 2, HEIGHT / 2)
self.vel = vect(0, 0)
self.acc = vect(0, 0)
def update(self):
self.acc = vect(0, 0)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.acc.x = -0.5
if keys[pygame.K_RIGHT]:
self.acc.y = 0.5
self.vel += self.acc
self.pos += self.vel + 0.5 * self.acc
self.rect.center = self.pos
player = Player()
FPS = 40
RECT_WIDTH = 50
RECT_HEIGHT = 50
run = True
while run:
pygame.time.Clock().tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
screen.fill(LIGHT_PURPLE)
player.update()
pygame.display.flip()
我没有像颜色变量赋值那样把所有的东西都放在一起,但我很确定这里有错误
2 个选项:
A)。添加绘图功能并绘制精灵 -简单修复
B)。制作精灵组并绘制所有精灵 - 如果使用大量精灵则很好
绘图函数
def update(self):
self.acc = vect(0, 0)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.acc.x = -0.5
if keys[pygame.K_RIGHT]:
self.acc.y = 0.5
self.vel += self.acc
self.pos += self.vel + 0.5 * self.acc
self.rect.center = self.pos
self.draw() # draw the sprite
def draw(self):
screen.blit(self.image,self.rect)
精灵组:
Sprites = pygame.sprite.Group()
player = Player()
Sprites.add(player)
然后循环
Sprites.update() # calls the update function in every sprite
Sprites.draw(screen) # draws every sprite onto the screen
作为
这是一个基于您的代码的完整 运行 示例:
import pygame
pygame.init()
WHITE = pygame.Color('WHITE')
LIGHT_PURPLE = pygame.Color('PURPLE')
vect = pygame.Vector2
class Player(pygame.sprite.Sprite):
def __init__(self, screen_r):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 50))
self.image.fill(WHITE)
self.rect = self.image.get_rect()
self.rect.center = screen_r.center
self.pos = vect(self.rect.center)
self.vel = vect(0, 0)
self.acc = vect(0, 0)
def update(self):
self.acc = vect(0, 0)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.acc.x = -0.5
if keys[pygame.K_RIGHT]:
self.acc.x = 0.5
self.vel += self.acc
self.pos += self.vel + 0.5 * self.acc
self.rect.center = self.pos
screen = pygame.display.set_mode((800, 600))
screen_r = screen.get_rect()
player = Player(screen_r)
FPS = 60
RECT_WIDTH = 50
RECT_HEIGHT = 50
run = True
all_sprites = pygame.sprite.Group(player)
while run:
pygame.time.Clock().tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
all_sprites.update()
screen.fill(LIGHT_PURPLE)
all_sprites.draw(screen)
pygame.display.flip()