python - 使用 pygame.Surface() 后 Pygame 精灵不会更新
问题描述
我正在使用 pygame 制作一个简单的平台游戏,但我似乎无法弄清楚如何更新我的精灵(现在它只是一个矩形)。每一个提示都会非常感激。
这是我的代码:
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个选项:
一个)。添加绘图功能并绘制精灵 - 简单修复
乙)。制作一个精灵组并绘制所有精灵 - 如果使用大量精灵则很好
绘制函数
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
推荐阅读
- node.js - Kubernetes pod 没有响应发送到其“exec”websocket 的消息
- x86 - 如果我不使用栅栏,一个核心需要多长时间才能看到另一个核心的写入?
- gremlin - 为什么 Gremlin 总是返回结果?
- svg - SVG 地图扩展
- python - 删除关键字后的单个单词
- python - 如何在 Python 中为异常返回 JSON 响应?
- windows - 在 Windows 10 的 Qtcreator qbs 文件中导入 OpenCV .lib
- typescript - 我找不到关于如何将“.expire”转换为打字稿对象的 angular 6 解决方案
- sql - SQL JOIN 多个表,限制为 1
- javascript - 如何在手机上禁用脚本