微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让我的播放器类中的更新函数在动画索引中移动

如何解决如何让我的播放器类中的更新函数在动画索引中移动

目前,当我的代码运行 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 举报,一经查实,本站将立刻删除。