天城建設(shè)網(wǎng)站免費(fèi)創(chuàng)建屬于自己的網(wǎng)站
學(xué)習(xí) Python 之 Pygame 開發(fā)魂斗羅(二)
- 魂斗羅的需求
- 開始編寫魂斗羅
- 1. 搭建主類框架
- 2. 設(shè)置游戲運(yùn)行遍歷和創(chuàng)建窗口
- 3. 獲取窗口中的事件
- 4. 創(chuàng)建角色
- 5. 完成角色更新函數(shù)
魂斗羅的需求
魂斗羅游戲中包含很多個物體,現(xiàn)在要對這些物體進(jìn)行總結(jié)
類名 | 包含的操作 | 包含的屬性 |
---|---|---|
玩家1類 | 跳躍、行走、落下、更新 | 生命,速度,傷害,方向,類型 |
玩家2類 | 跳躍、行走、落下、更新 | 生命,速度,傷害,方向,類型 |
敵人類 | 跳躍、行走、落下、更新 | 生命,速度,傷害,方向,類型 |
子彈類 | 移動,顯示 | 方向,傷害,發(fā)射源,速度 |
橋類、陷阱類、獎勵類、BOSS類 | … | … |
音效類 | 播放,停止,設(shè)置音樂 | - |
爆炸效果類 | 顯示 | 是否可以摧毀 |
主類 | … | … |
物體總結(jié)完畢后,規(guī)劃一下窗口的大小,下面是我設(shè)置的窗口大小
由于地圖素材的大小限制,下面這個窗口的大小剛剛合適
開始編寫魂斗羅
那么我們開始來編寫魂斗羅吧
1. 搭建主類框架
同樣地,先寫主類,主類是整個游戲運(yùn)作的類,我們也可以不用這樣的方式,可以使用函數(shù)代替
import pygameclass MainGame:window = Nonedef __init__(self):passdef run(self):passif __name__ == '__main__':pass
2. 設(shè)置游戲運(yùn)行遍歷和創(chuàng)建窗口
魂斗羅游戲不像坦克大戰(zhàn),坦克大戰(zhàn)中坦克移動是把圖片放到不同的位置,而魂斗羅中,人物移動有移動的動畫,跳躍也有跳躍的動畫,我們需要設(shè)置幀率,通過控制幀率來實(shí)現(xiàn)動畫效果
首先創(chuàng)建一個常量Constants.py文件,用于存放游戲中使用的常量
from enum import Enum# 玩家的四種狀態(tài)
class State(Enum):STAND = 1WALK = 2JUMP = 3FALL = 4# 玩家的方向
class Direction(Enum):RIGHT = 1LEFT = 2# 設(shè)置窗口大小
SCREEN_HEIGHT = 600
SCREEN_WIDTH = 800
GROUND_HEIGHT = 63# 玩家x方向速度
PLAYER_X_SPEED = 3
設(shè)置遍歷和創(chuàng)建窗口
def __init__(self):# 初始化展示模塊pygame.display.init()SCREEN_SIZE = (SCREEN_WIDTH, SCREEN_HEIGHT)# 初始化窗口MainGame.window = pygame.display.set_mode(SCREEN_SIZE)# 設(shè)置窗口標(biāo)題pygame.display.set_caption('魂斗羅角色')# 是否結(jié)束游戲self.isEnd = False# 獲取按鍵self.keys = pygame.key.get_pressed()# 幀率self.fps = 60self.clock = pygame.time.Clock()
修改一下run()函數(shù)
def run(self):while not self.isEnd:# 設(shè)置背景顏色pygame.display.get_surface().fill((0, 0, 0))# 更新窗口pygame.display.update()# 設(shè)置幀率self.clock.tick(self.fps)fps = self.clock.get_fps()caption = '魂斗羅 - {:.2f}'.format(fps)pygame.display.set_caption(caption)else:sys.exit()
完整主類代碼
import sys
import pygame
from Constants import *class MainGame:window = Nonedef __init__(self):# 初始化展示模塊pygame.display.init()SCREEN_SIZE = (SCREEN_WIDTH, SCREEN_HEIGHT)# 初始化窗口MainGame.window = pygame.display.set_mode(SCREEN_SIZE)# 設(shè)置窗口標(biāo)題pygame.display.set_caption('魂斗羅角色')# 是否結(jié)束游戲self.isEnd = False# 獲取按鍵self.keys = pygame.key.get_pressed()# 幀率self.fps = 60self.clock = pygame.time.Clock()def run(self):while not self.isEnd:# 設(shè)置背景顏色pygame.display.get_surface().fill((0, 0, 0))# 更新窗口pygame.display.update()# 設(shè)置幀率self.clock.tick(self.fps)fps = self.clock.get_fps()caption = '魂斗羅 - {:.2f}'.format(fps)pygame.display.set_caption(caption)else:sys.exit()if __name__ == '__main__':MainGame().run()
運(yùn)行一下,看看窗口
3. 獲取窗口中的事件
在魂斗羅中,玩家移動是必不可少的操作,因此鍵盤事件響應(yīng)是必不可少的
def getPlayingModeEvent(self):# 獲取事件列表for event in pygame.event.get():# 點(diǎn)擊窗口關(guān)閉按鈕if event.type == pygame.QUIT:self.isEnd = True# 鍵盤按鍵按下elif event.type == pygame.KEYDOWN:self.keys = pygame.key.get_pressed()# 鍵盤按鍵抬起elif event.type == pygame.KEYUP:self.keys = pygame.key.get_pressed()
獲取窗口中的事件,用于玩家角色移動、發(fā)射子彈等操作
在這個游戲中,我規(guī)定aswd操控玩家移動,j攻擊,k跳躍
import sys
import pygame
from Constants import *class MainGame:window = Nonedef __init__(self):# 初始化展示模塊pygame.display.init()SCREEN_SIZE = (SCREEN_WIDTH, SCREEN_HEIGHT)# 初始化窗口MainGame.window = pygame.display.set_mode(SCREEN_SIZE)# 設(shè)置窗口標(biāo)題pygame.display.set_caption('魂斗羅角色')# 是否結(jié)束游戲self.isEnd = False# 獲取按鍵self.keys = pygame.key.get_pressed()# 幀率self.fps = 60self.clock = pygame.time.Clock()def run(self):while not self.isEnd:# 設(shè)置背景顏色pygame.display.get_surface().fill((0, 0, 0))# 獲取窗口中的事件self.getPlayingModeEvent()# 更新窗口pygame.display.update()# 設(shè)置幀率self.clock.tick(self.fps)fps = self.clock.get_fps()caption = '魂斗羅 - {:.2f}'.format(fps)pygame.display.set_caption(caption)else:sys.exit()def getPlayingModeEvent(self):# 獲取事件列表for event in pygame.event.get():# 點(diǎn)擊窗口關(guān)閉按鈕if event.type == pygame.QUIT:self.isEnd = True# 鍵盤按鍵按下elif event.type == pygame.KEYDOWN:self.keys = pygame.key.get_pressed()# 鍵盤按鍵抬起elif event.type == pygame.KEYUP:self.keys = pygame.key.get_pressed()if __name__ == '__main__':MainGame().run()
4. 創(chuàng)建角色
創(chuàng)建一個玩家類,實(shí)現(xiàn)玩家的移動和射擊,玩家類需要繼承
pygame.sprite.Sprite類,用來實(shí)現(xiàn)物體的碰撞檢測
import pygame
from Constants import *class PlayerOne(pygame.sprite.Sprite):def __init__(self, currentTime):pygame.sprite.Sprite.__init__(self)passdef update(self, playerBulletList, keys, currentTime):pass
創(chuàng)建玩家類后,先把玩家圖片加載進(jìn)來,這里需要寫一個函數(shù),用來處理圖片
在常量Constants.py文件中,寫一個函數(shù),用來加載圖片
def loadImage(filename, hReverse = False):image = pygame.image.load(filename)if hReverse:image = pygame.transform.flip(image, True, False)rect = image.get_rect()image = pygame.transform.scale(image,(int(rect.width * 2.5), int(rect.height * 2.5)))image = image.convert_alpha()return image
這個函數(shù)用來設(shè)置圖片放縮和水平翻轉(zhuǎn)
因?yàn)樗夭闹写蠖鄶?shù)圖片都是向右的,如果要得到向左的,必須要進(jìn)行翻轉(zhuǎn),為了方便,我就沒有處理素材,直接使用了翻轉(zhuǎn)
文件中翻轉(zhuǎn)和縮放代碼,在學(xué)習(xí) Python 之 Pygame 開發(fā)魂斗羅(一)中已經(jīng)見過了
完整的常量文件
from enum import Enum
import pygameclass State(Enum):STAND = 1WALK = 2JUMP = 3FALL = 4SQUAT = 5class Direction(Enum):RIGHT = 1LEFT = 2def loadImage(filename, hReverse = False):image = pygame.image.load(filename)if hReverse:image = pygame.transform.flip(image, True, False)rect = image.get_rect()image = pygame.transform.scale(image,(int(rect.width * 2.5), int(rect.height * 2.5)))image = image.convert_alpha()return image# 設(shè)置窗口大小
SCREEN_HEIGHT = 600
SCREEN_WIDTH = 800
GROUND_HEIGHT = 63# 玩家x方向速度
PLAYER_X_SPEED = 3
這里需要注意一點(diǎn),由于玩家移動時有動畫效果,所有我們載入的圖片是連續(xù)的好幾張
下面是圖片的素材
鏈接:https://pan.baidu.com/s/1X7tESkes_O6nbPxfpHD6hQ?pwd=hdly
提取碼:hdly
有了素材,開始讀取圖片吧,修改玩家類的__init__()函數(shù)
def __init__(self, currentTime):pygame.sprite.Sprite.__init__(self)# 加載角色圖片self.standRightImage = loadImage('../Image/Player/Player1/Right/stand.png')self.standLeftImage = loadImage('../Image/Player/Player1/Left/stand.png')self.upRightImage = loadImage('../Image/Player/Player1/Up/upRight(small).png')self.upLeftImage = loadImage('../Image/Player/Player1/Up/upLeft(small).png')self.downRightImage = loadImage('../Image/Player/Player1/Down/down.png')self.downLeftImage = loadImage('../Image/Player/Player1/Down/down.png', True)self.obliqueUpRightImages = [loadImage('../Image/Player/Player1/Up/rightUp1.png'),loadImage('../Image/Player/Player1/Up/rightUp2.png'),loadImage('../Image/Player/Player1/Up/rightUp3.png'),]self.obliqueUpLeftImages = [loadImage('../Image/Player/Player1/Up/rightUp1.png', True),loadImage('../Image/Player/Player1/Up/rightUp2.png', True),loadImage('../Image/Player/Player1/Up/rightUp3.png', True),]self.obliqueDownRightImages = [loadImage('../Image/Player/Player1/ObliqueDown/1.png'),loadImage('../Image/Player/Player1/ObliqueDown/2.png'),loadImage('../Image/Player/Player1/ObliqueDown/3.png'),]self.obliqueDownLeftImages = [loadImage('../Image/Player/Player1/ObliqueDown/1.png', True),loadImage('../Image/Player/Player1/ObliqueDown/2.png', True),loadImage('../Image/Player/Player1/ObliqueDown/3.png', True),]# 角色向右的全部圖片self.rightImages = [loadImage('../Image/Player/Player1/Right/run1.png'),loadImage('../Image/Player/Player1/Right/run2.png'),loadImage('../Image/Player/Player1/Right/run3.png')]# 角色向左的全部圖片self.leftImages = [loadImage('../Image/Player/Player1/Left/run1.png'),loadImage('../Image/Player/Player1/Left/run2.png'),loadImage('../Image/Player/Player1/Left/run3.png')]# 角色跳躍的全部圖片self.upRightImages = [loadImage('../Image/Player/Player1/Jump/jump1.png'),loadImage('../Image/Player/Player1/Jump/jump2.png'),loadImage('../Image/Player/Player1/Jump/jump3.png'),loadImage('../Image/Player/Player1/Jump/jump4.png'),]self.upLeftImages = [loadImage('../Image/Player/Player1/Jump/jump1.png', True),loadImage('../Image/Player/Player1/Jump/jump2.png', True),loadImage('../Image/Player/Player1/Jump/jump3.png', True),loadImage('../Image/Player/Player1/Jump/jump4.png', True),]self.rightFireImages = [loadImage('../Image/Player/Player1/Right/fire1.png'),loadImage('../Image/Player/Player1/Right/fire2.png'),loadImage('../Image/Player/Player1/Right/fire3.png'),]self.leftFireImages = [loadImage('../Image/Player/Player1/Right/fire1.png', True),loadImage('../Image/Player/Player1/Right/fire2.png', True),loadImage('../Image/Player/Player1/Right/fire3.png', True),]
圖片讀取好后,我們需要設(shè)置一些索引,用來記錄當(dāng)前應(yīng)該加載哪一張圖片
舉個簡單的例子,人物向右行走的圖片有三張,如下圖
我們需要在人物跑動的時候,循環(huán)加載這三張圖片,所以要設(shè)置一個索引,用來記錄當(dāng)前加載到了哪一張,如果是第三張,那么把索引再變?yōu)?,這樣下次就又開始加載第一張圖片了,循環(huán)下去,就可以看到人物跑動的動畫了
好,那我們就來設(shè)置索引
def __init__(self, currentTime):...# 角色左右移動下標(biāo)self.imageIndex = 0# 角色跳躍下標(biāo)self.upImageIndex = 0# 角色斜射下標(biāo)self.obliqueImageIndex = 0...
有了下標(biāo)還要考慮加載圖片的間隔,這個游戲中,在前面我們已經(jīng)設(shè)置了游戲的幀率,為60,就是一秒加載60張圖片,如果不設(shè)置時間間隔,玩家移動的時候,加載的圖片是閃的,因?yàn)樘炝?#xff0c;看不清楚,所以要設(shè)置間隔
首先記錄下上次加載的圖片的時間,然后在顯示玩家圖片時,用當(dāng)前的時間減去上次加載圖片的時間,如果相差一定的間隔,那么就讓索引+1,超過圖片個數(shù)就把索引置為0
下面是設(shè)置上一次加載圖片的時間變量
def __init__(self, currentTime):...# 上一次顯示圖片的時間self.runLastTimer = currentTimeself.fireLastTimer = currentTime...
這里要區(qū)分一下,因?yàn)橥婕乙苿拥臅r候也可以射擊,所以移動射擊的圖片和移動不射擊的圖片要分開索引,防止混淆
之后設(shè)置一下玩家的其他屬性
# 選擇當(dāng)前要顯示的圖片self.image = self.standRightImage# 獲取圖片的rectself.rect = self.image.get_rect()# 設(shè)置角色的狀態(tài)self.state = State.FALL# 角色的方向self.direction = Direction.RIGHT# 速度self.xSpeed = PLAYER_X_SPEEDself.ySpeed = 0self.jumpSpeed = -11# 人物當(dāng)前的狀態(tài)標(biāo)志self.isStanding = Falseself.isWalking = Falseself.isJumping = Trueself.isSquating = Falseself.isFiring = False# 重力加速度self.gravity = 0.7# 玩家上下的朝向self.isUp = Falseself.isDown = False
角色一開始是降落的狀態(tài),是因?yàn)殚_始的時候角色從天而降
# 人物當(dāng)前的狀態(tài)標(biāo)志
self.isStanding = False
self.isWalking = False
self.isJumping = True
self.isSquating = False
self.isFiring = False# 玩家上下的朝向
self.isUp = False
self.isDown = False
這兩組屬性,用來畫出當(dāng)前角色的圖片
完整的角色類代碼
import pygame
from Constants import *class PlayerOne(pygame.sprite.Sprite):def __init__(self, currentTime):pygame.sprite.Sprite.__init__(self)# 加載角色圖片self.standRightImage = loadImage('../Image/Player/Player1/Right/stand.png')self.standLeftImage = loadImage('../Image/Player/Player1/Left/stand.png')self.upRightImage = loadImage('../Image/Player/Player1/Up/upRight(small).png')self.upLeftImage = loadImage('../Image/Player/Player1/Up/upLeft(small).png')self.downRightImage = loadImage('../Image/Player/Player1/Down/down.png')self.downLeftImage = loadImage('../Image/Player/Player1/Down/down.png', True)self.obliqueUpRightImages = [loadImage('../Image/Player/Player1/Up/rightUp1.png'),loadImage('../Image/Player/Player1/Up/rightUp2.png'),loadImage('../Image/Player/Player1/Up/rightUp3.png'),]self.obliqueUpLeftImages = [loadImage('../Image/Player/Player1/Up/rightUp1.png', True),loadImage('../Image/Player/Player1/Up/rightUp2.png', True),loadImage('../Image/Player/Player1/Up/rightUp3.png', True),]self.obliqueDownRightImages = [loadImage('../Image/Player/Player1/ObliqueDown/1.png'),loadImage('../Image/Player/Player1/ObliqueDown/2.png'),loadImage('../Image/Player/Player1/ObliqueDown/3.png'),]self.obliqueDownLeftImages = [loadImage('../Image/Player/Player1/ObliqueDown/1.png', True),loadImage('../Image/Player/Player1/ObliqueDown/2.png', True),loadImage('../Image/Player/Player1/ObliqueDown/3.png', True),]# 角色向右的全部圖片self.rightImages = [loadImage('../Image/Player/Player1/Right/run1.png'),loadImage('../Image/Player/Player1/Right/run2.png'),loadImage('../Image/Player/Player1/Right/run3.png')]# 角色向左的全部圖片self.leftImages = [loadImage('../Image/Player/Player1/Left/run1.png'),loadImage('../Image/Player/Player1/Left/run2.png'),loadImage('../Image/Player/Player1/Left/run3.png')]# 角色跳躍的全部圖片self.upRightImages = [loadImage('../Image/Player/Player1/Jump/jump1.png'),loadImage('../Image/Player/Player1/Jump/jump2.png'),loadImage('../Image/Player/Player1/Jump/jump3.png'),loadImage('../Image/Player/Player1/Jump/jump4.png'),]self.upLeftImages = [loadImage('../Image/Player/Player1/Jump/jump1.png', True),loadImage('../Image/Player/Player1/Jump/jump2.png', True),loadImage('../Image/Player/Player1/Jump/jump3.png', True),loadImage('../Image/Player/Player1/Jump/jump4.png', True),]self.rightFireImages = [loadImage('../Image/Player/Player1/Right/fire1.png'),loadImage('../Image/Player/Player1/Right/fire2.png'),loadImage('../Image/Player/Player1/Right/fire3.png'),]self.leftFireImages = [loadImage('../Image/Player/Player1/Right/fire1.png', True),loadImage('../Image/Player/Player1/Right/fire2.png', True),loadImage('../Image/Player/Player1/Right/fire3.png', True),]# 角色左右移動下標(biāo)self.imageIndex = 0# 角色跳躍下標(biāo)self.upImageIndex = 0# 角色斜射下標(biāo)self.obliqueImageIndex = 0# 上一次顯示圖片的時間self.runLastTimer = currentTimeself.fireLastTimer = currentTime# 選擇當(dāng)前要顯示的圖片self.image = self.standRightImage# 獲取圖片的rectself.rect = self.image.get_rect()# 設(shè)置角色的狀態(tài)self.state = State.FALL# 角色的方向self.direction = Direction.RIGHT# 速度self.xSpeed = PLAYER_X_SPEEDself.ySpeed = 0self.jumpSpeed = -11# 人物當(dāng)前的狀態(tài)標(biāo)志self.isStanding = Falseself.isWalking = Falseself.isJumping = Trueself.isSquating = Falseself.isFiring = False# 重力加速度self.gravity = 0.7self.isUp = Falseself.isDown = Falsedef update(self, playerBulletList, keys, currentTime):pass
5. 完成角色更新函數(shù)
先根據(jù)狀態(tài)讀取下一次操作,再更新玩家位置,再根據(jù)方向和狀態(tài)標(biāo)志覺得玩家顯示的圖片
def update(self, keys, currentTime):# 更新站或者走的狀態(tài)# 根據(jù)狀態(tài)響應(yīng)按鍵if self.state == State.STAND:self.standing(keys, currentTime)elif self.state == State.WALK:self.walking(keys, currentTime)elif self.state == State.JUMP:self.jumping(keys, currentTime)elif self.state == State.FALL:self.falling(keys, currentTime)# 更新位置# 記錄前一次的位置坐標(biāo)pre = self.rect.xself.rect.x += self.xSpeedself.rect.y += self.ySpeed# 如果x位置小于0了,就不能移動,防止人物跑到屏幕左邊if self.rect.x <= 0:self.rect.x = pre
根據(jù)狀態(tài)標(biāo)志設(shè)置角色圖片
# 更新動畫# 跳躍狀態(tài)if self.isJumping:# 根據(jù)方向if self.direction == Direction.RIGHT:# 方向向右,角色加載向右跳起的圖片self.image = self.upRightImages[self.upImageIndex]else:# 否則,方向向左,角色加載向左跳起的圖片self.image = self.upLeftImages[self.upImageIndex]# 角色蹲下if self.isSquating:if self.direction == Direction.RIGHT:# 加載向右蹲下的圖片self.image = self.downRightImageelse:# 加載向左蹲下的圖片self.image = self.downLeftImage# 角色站著if self.isStanding:if self.direction == Direction.RIGHT:if self.isUp:# 加載向右朝上的圖片self.image = self.upRightImageelif self.isDown:# 加載向右蹲下的圖片self.image = self.downRightImageelse:# 加載向右站著的圖片self.image = self.standRightImageelse:# 向左也是同樣的效果if self.isUp:self.image = self.upLeftImageelif self.isDown:self.image = self.downLeftImageelse:self.image = self.standLeftImage# 角色移動if self.isWalking:if self.direction == Direction.RIGHT:if self.isUp:# 加載斜右上的圖片self.image = self.obliqueUpRightImages[self.obliqueImageIndex]elif self.isDown:# 加載斜右下的圖片self.image = self.obliqueDownRightImages[self.obliqueImageIndex]else:# 加載向右移動的圖片,根據(jù)開火狀態(tài)是否加載向右開火移動的圖片if self.isFiring:self.image = self.rightFireImages[self.imageIndex]else:self.image = self.rightImages[self.imageIndex]else:if self.isUp:self.image = self.obliqueUpLeftImages[self.obliqueImageIndex]elif self.isDown:self.image = self.obliqueDownLeftImages[self.obliqueImageIndex]else:if self.isFiring:self.image = self.leftFireImages[self.imageIndex]else:self.image = self.leftImages[self.imageIndex]
完整的update()函數(shù)
def update(self, playerBulletList, keys, currentTime):# 更新站或者走的狀態(tài)# 根據(jù)狀態(tài)響應(yīng)按鍵if self.state == State.STAND:self.standing(keys, currentTime, playerBulletList)elif self.state == State.WALK:self.walking(keys, currentTime, playerBulletList)elif self.state == State.JUMP:self.jumping(keys, currentTime, playerBulletList)elif self.state == State.FALL:self.falling(keys, currentTime, playerBulletList)# 更新位置# 記錄前一次的位置坐標(biāo)pre = self.rect.xself.rect.x += self.xSpeedself.rect.y += self.ySpeed# 如果x位置小于0了,就不能移動,防止人物跑到屏幕左邊if self.rect.x <= 0:self.rect.x = pre# 更新動畫# 跳躍狀態(tài)if self.isJumping:# 根據(jù)方向if self.direction == Direction.RIGHT:# 方向向右,角色加載向右跳起的圖片self.image = self.upRightImages[self.upImageIndex]else:# 否則,方向向左,角色加載向左跳起的圖片self.image = self.upLeftImages[self.upImageIndex]# 角色蹲下if self.isSquating:if self.direction == Direction.RIGHT:# 加載向右蹲下的圖片self.image = self.downRightImageelse:# 加載向左蹲下的圖片self.image = self.downLeftImage# 角色站著if self.isStanding:if self.direction == Direction.RIGHT:if self.isUp:# 加載向右朝上的圖片self.image = self.upRightImageelif self.isDown:# 加載向右蹲下的圖片self.image = self.downRightImageelse:# 加載向右站著的圖片self.image = self.standRightImageelse:# 向左也是同樣的效果if self.isUp:self.image = self.upLeftImageelif self.isDown:self.image = self.downLeftImageelse:self.image = self.standLeftImage# 角色移動if self.isWalking:if self.direction == Direction.RIGHT:if self.isUp:# 加載斜右上的圖片self.image = self.obliqueUpRightImages[self.obliqueImageIndex]elif self.isDown:# 加載斜右下的圖片self.image = self.obliqueDownRightImages[self.obliqueImageIndex]else:# 加載向右移動的圖片,根據(jù)開火狀態(tài)是否加載向右開火移動的圖片if self.isFiring:self.image = self.rightFireImages[self.imageIndex]else:self.image = self.rightImages[self.imageIndex]else:if self.isUp:self.image = self.obliqueUpLeftImages[self.obliqueImageIndex]elif self.isDown:self.image = self.obliqueDownLeftImages[self.obliqueImageIndex]else:if self.isFiring:self.image = self.leftFireImages[self.imageIndex]else:self.image = self.leftImages[self.imageIndex]
之后就是對四個狀態(tài)函數(shù)進(jìn)行完善啦