如何解决如何让我的播放器类中的更新函数在动画索引中移动
目前,当我的代码运行 Player 类的更新函数时,它什么也不做。我想更新函数以将 1 添加到索引。这应该使精灵在动画中移动。我不知道在这里写什么。
import pygame
import sys,os
import random
from colors import *
CLOCK = pygame.time.Clock()
FPS = 1
SIZE = WIDTH,HEIGHT = 576,480
TILESIZE = 32
CAPTION = pygame.display.set_caption('BRRRRRRRRR')
class Player(pygame.sprite.Sprite):
def __init__(self,game):
self.groups = game.sprites
pygame.sprite.Sprite.__init__(self,self.groups)
self.images = []
self.images.append(pygame.image.load("sprites/0.png"))
self.images.append(pygame.image.load("sprites/1.png"))
self.images.append(pygame.image.load("sprites/2.png"))
self.images.append(pygame.image.load("sprites/3.png"))
self.i = 0
self.image = self.images[self.i]
self.rect = pygame.Rect(5,5,32,32)
def update(self):
self.i += 1
print(self.i)
self.image = self.images[self.i]
class Control(object):
"""nothing to see here folks"""
def __init__(self):
pygame.init()
self.screen = pygame.display.set_mode(SIZE)
self.img_dir = os.path.dirname(__file__),'img'
#self.load_data()
self.new()
def new(self):
self.sprites = pygame.sprite.Group()
p = Player(self)
def load_data(self):
pass
def update(self):
self.sprites.update()
def draw(self):
self.screen.fill(BGCOLOR)
self.sprites.draw(self.screen)
pygame.display.update()
CLOCK.tick(FPS)
def events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit(self.screen)
def display_fps(self):
self.caption = "{} - FPS: {:.2f}".format(CAPTION,CLOCK.get_fps())
pygame.display.set_caption(self.caption)
def run(self):
self.display_fps()
self.events()
self.update()
self.draw()
if __name__ == "__main__":
while True:
run_it = Control()
run_it.run()
解决方法
有两个问题。你会得到IndexError: list index out of range。您需要确保 self.i
始终小于 self.images
列表中的图像数量:
class Player(pygame.sprite.Sprite):
# [...]
def update(self):
self.i += 1
if self.i >= len(self.images):
self.i = 0
print(self.i)
self.image = self.images[self.i]
由于 Control
的实例是在应用程序循环中创建的,因此您的游戏将每帧不断地重新启动。这意味着 i
总是从 0 开始。Control
的实例必须在应用程序循环之前之前创建一次,而不是在应用程序循环中创建:
if __name__ == "__main__":
run_it = Control()
while True:
run_it.run()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。