對主程序的優化,看別人的文章到這裏,雖然沒完全懂。
此段代碼主要是針對,主程序的優化和建立類來進行管理畫面元素。
對原程序進行了修改,優化和整理
import pygame #導入pygame庫
from pygame.locals import * #導入pygame庫中的一些常量
from sys import exit #導入sys庫中的exit函數
#創建Hero類,繼承自pygame.sprite.Sprite
class Hero(pygame.sprite.Sprite):
def __init__(self,hero_surface,hero_init_pos):
pygame.sprite.Sprite.__init__(self)
self.image = hero_surface
self.rect = self.image.get_rect()
self.rect.topleft = hero_init_pos
self.speed = 6
def move(self,offset):
hero_x=self.rect.left+offset[pygame.K_RIGHT]-offset[pygame.K_LEFT]
hero_y=self.rect.top+offset[pygame.K_DOWN]-offset[pygame.K_UP]
if hero_x < 0:
self.rect.left = 0
elif hero_x > SCREEN_WIDTH - self.rect.width:
self.rect.left = SCREEN_WIDTH - self.rect.width
else:
self.rect.left = hero_x
if hero_y < 0:
self.rect.top = 0
elif hero_y > SCREEN_HEIGHT - self.rect.height:
self.rect.top = SCREEN_HEIGHT - self.rect.height
else:
self.rect.top = hero_y
#定義窗口的分辨率
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 640
FRAME_RATE = 60
ANIMATE_CYCLE = 20
#計數ticks
ticks = 0
#去除了不斷繪製飛機,容易消耗資源,使用clock,控制最大幀率FRAME_RATE
clock =pygame.time.Clock()
#創建字典,按下上下左右鍵的的增量
offset ={pygame.K_LEFT:0,pygame.K_RIGHT:0,pygame.K_UP:0,pygame.K_DOWN:0}
#初始化遊戲
pygame.init()
screen = pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT])
pygame.display.set_caption('這是一個打飛機遊戲!')
#載入背景圖
background = pygame.image.load('images/background.png')
#載入資源圖
hero_surface=[]
hero_surface.append(pygame.image.load('images/me1.png'))
hero_surface.append(pygame.image.load('images/me2.png'))
hero_pos=[200,500]
#創建玩家
hero = Hero(hero_surface[0],hero_pos)
#事件循環
while True:
clock.tick(FRAME_RATE)
#繪製背景
screen.blit(background,(0,0))
#繪製飛機,在循環過程中讓每過25個週期切換2個飛機圖。這樣會產生動圖的效果
if ticks >= ANIMATE_CYCLE:
ticks = 0
hero.imgae =hero_surface[ticks//(ANIMATE_CYCLE//2)]
screen.blit(hero.imgae,hero.rect)
ticks += 1
#更新屏幕
pygame.display.update()
#處理遊戲退出
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
#按鍵按下和放開的事件,按下時座標增3,放開,置零
if event.type == pygame.KEYDOWN:
if event.key in offset:
offset[event.key] = hero.speed #增量的大小,主飛機移動速度的快慢
elif event.type == pygame.KEYUP:
if event.key in offset:
offset[event.key] = 0
hero.move(offset)
運行效果: