Python Pygame:如何使用Pyganim?

Python Pygame:如何使用Pyganim?,python,python-2.7,pygame,Python,Python 2.7,Pygame,我目前正在制作一个游戏,我正在添加玩家动画,并尝试使用pyganim制作动画。我有我想用于左怠速、右怠速、左运转、右运转的图像。以下是我的播放器的代码: import pygame, time import pygame.mixer from bullet import Bullet from constants import * # Player class Player(pygame.sprite.Sprite): def __init__(self, x, y, gravity

我目前正在制作一个游戏,我正在添加玩家动画,并尝试使用pyganim制作动画。我有我想用于左怠速、右怠速、左运转、右运转的图像。以下是我的播放器的代码:

import pygame, time
import pygame.mixer
from bullet import Bullet
from constants import *

# Player
class Player(pygame.sprite.Sprite):

    def __init__(self, x, y, gravity):
        pygame.mixer.init()

        # Player dimensions and position

        # Player image and animation
        self.images = []
        self.images.append(pygame.image.load('data/images/Sprites/player.png'))
        self.images.append(pygame.image.load('data/images/Sprites/player2.png'))
        self.maxImage = len(self.images)
        self.currentImage = 0

        self.jumpSound = pygame.mixer.Sound('data/sounds/jump.ogg')
        self.shootSound = pygame.mixer.Sound('data/sounds/laser.ogg')
        self.power = POWER_NONE

        #~ self.rect = pygame.Rect(x, y, 80, 80)
        self.rect = self.images[0].get_rect()
        self.rect.x = x
        self.rect.y = y

        self.timeTarget = 10
        self.timeNum = 0

        self.velX = 0
        self.velY = 0
        self.friction = 1

        self.health = 200
        self.lives = 3
        self.score = 0
        self.second = 1000
        self.minute = 60000
        self.start_alivetime = pygame.time.get_ticks()
        self.start_alivetime2 = pygame.time.get_ticks()

        self.direction = DIR_RIGHT

        # Jump and gravity
        self.jumping = False
        self.on_ground = False
        self.origJumpVel = 17
        self.jumpVel = self.origJumpVel
        self.gravity = 0.5

    # Jump inputs
    def do_jump(self):
        if self.jumping and not self.on_ground:
            self.velY = -self.jumpVel
            self.jumpVel -= self.gravity

        if self.on_ground:
            self.jumping = False
            self.jumpVel = self.origJumpVel
            self.velY = 0
            self.on_ground = True

    def handle_events(self, event):
        key = pygame.key.get_pressed()

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_SPACE:
                self.jumpSound.play(0)
                if not self.jumping:
                    self.jumping = True
                    self.on_ground = False

            if event.key == pygame.K_s:
                self.shootSound.play(0)

            if key[pygame.K_a]:
                self.velX = -7
            if key[pygame.K_d]:
                self.velX = +7

        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                self.shootSound.play(0)

        elif event.type == pygame.KEYUP:
            if event.key in (pygame.K_a, pygame.K_d):
                self.velX = 0

        elif event.type == pygame.KEYUP:
            if event.key in (pygame.K_LEFT, pygame.K_RIGHT):
                bullet.velX = 0

    # PLayer updates
    def update(self):

        #self.timeNum += 1
        # Animations
        #if self.direction == DIR_LEFT:
            #if self.timeNum == self.timeTarget:
                    #self.currentImage += 1
                #if self.currentImage >= self.maxImage:
                    #self.currentImage = 0
                #self.timeNum = 0

        # Timer
        if self.health > 0:
            self.alivetime = (pygame.time.get_ticks() - self.start_alivetime) / self.second
            if self.health <= 0:
                self.alivetime = pygame.time.get_ticks() + 0
                self.start_alivetime = self.alivetime

        # Screen wrap
        if self.rect.right > 1280:
            self.rect.left = 0

        elif self.rect.left < 0:
            self.rect.right = 1280

        if self.velX < 0 and self.direction != DIR_RIGHT: # Moving right
            self.direction = DIR_RIGHT
            self.images[self.currentImage] = pygame.transform.flip(self.images[self.currentImage], True, False)

        elif self.velX > 0 and self.direction != DIR_LEFT: # Moving left
            self.direction = DIR_LEFT
            self.images[self.currentImage] = pygame.transform.flip(self.images[self.currentImage], True, False)

    # Player rendering
    def render(self, surface):
        surface.blit(self.images[self.currentImage], self.rect)
导入pygame,时间
导入pygame.mixer
从bullet导入bullet
从常量导入*
#玩家
职业玩家(pygame.sprite.sprite):
定义初始(自、x、y、重力):
pygame.mixer.init()
#球员尺寸和位置
#播放器图像和动画
self.images=[]
self.images.append(pygame.image.load('data/images/Sprites/player.png'))
self.images.append(pygame.image.load('data/images/Sprites/player2.png'))
self.maxImage=len(self.images)
self.currentImage=0
self.jumpSound=pygame.mixer.Sound('data/sounds/jump.ogg'))
self.shootSound=pygame.mixer.Sound('data/sounds/laser.ogg'))
self.power=power\u无
#~self.rect=pygame.rect(x,y,80,80)
self.rect=self.images[0]。get_rect()
self.rect.x=x
自校正y=y
self.timeTarget=10
self.timeNum=0
self.velX=0
self.velY=0
自摩擦=1
自我健康=200
self.lifes=3
self.score=0
self.second=1000
self.minute=60000
self.start_alivetime=pygame.time.get_ticks()
self.start_alivetime2=pygame.time.get_ticks()
self.direction=DIR\u RIGHT
#跳跃与重力
自我跳跃=错误
self.on_地面=错误
自激激励水平=17
self.jumpVel=self.origJumpVel
自重=0.5
#跳转输入
def do_跳转(自):
如果在地面上自行跳跃而非自行:
self.velY=-self.jumpVel
自跳电平-=自重力
如果自身在地面上:
自我跳跃=错误
self.jumpVel=self.origJumpVel
self.velY=0
self.on_地面=真
def句柄_事件(自身、事件):
key=pygame.key.get_pressed()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
自我。跳跃声音。播放(0)
如果不是自我跳跃:
self.jumping=True
self.on_地面=错误
如果event.key==pygame.K_:
self.shootSound.play(0)
如果键[pygame.K_a]:
self.velX=-7
如果键[pygame.K_d]:
self.velX=+7
elif event.type==pygame.MOUSEBUTTONDOWN:
如果event.button==1:
self.shootSound.play(0)
elif event.type==pygame.KEYUP:
如果event.key(pygame.K_a,pygame.K_d):
self.velX=0
elif event.type==pygame.KEYUP:
如果event.key输入(pygame.K_左,pygame.K_右):
bullet.velX=0
#播放器更新
def更新(自我):
#self.timeNum+=1
#动画
#如果self.direction==DIR\u LEFT:
#如果self.timeNum==self.timeTarget:
#self.currentImage+=1
#如果self.currentImage>=self.maxImage:
#self.currentImage=0
#self.timeNum=0
#计时器
如果self.health>0:
self.alivetime=(pygame.time.get_ticks()-self.start_alivetime)/self.second
如果self.health 1280:
self.rect.left=0
elif self.rect.left<0:
self.rect.right=1280
如果self.velX<0且self.direction!=右方向:#向右移动
self.direction=DIR\u RIGHT
self.images[self.currentImage]=pygame.transform.flip(self.images[self.currentImage],True,False)
elif self.velX>0和self.direction!=方向左:#向左移动
self.direction=DIR\u LEFT
self.images[self.currentImage]=pygame.transform.flip(self.images[self.currentImage],True,False)
#播放器渲染
def渲染(自、曲面):
blit(self.images[self.currentImage],self.rect)
以下是我的播放器动画的两个图像(向左运行):

没问题,我只是需要关于如何使用PyGanim的帮助。我担心您的问题不适合堆栈溢出。我建议你自己学习和实验。如果你遇到了一个特定的问题,请随意提问。