再上次代码中运行时遇到边界问题,故解决后代码如下:
就最后一段飞机坐标的设定上做下代码处理
import pygame #导入pygame库
from pygame.locals import * #导入pygame库中的一些常量
from sys import exit #导入sys库中的exit函数
#定义窗口的分辨率
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 640
#计数ticks
ticks = 0
#创建字典,按下上下左右键的的增量
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')
#载入资源图
hero1 = pygame.image.load('images/me1.png')
hero2 = pygame.image.load('images/me2.png')
hero_pos=[200,500]
#事件循环
while True:
#绘制背景
screen.blit(background,(0,0))
#绘制飞机,在循环过程中让每过25个周期切换2个飞机图。这样会产生动图的效果
if ticks % 50 < 25:
screen.blit(hero1,hero_pos)
else:
screen.blit(hero2,hero_pos)
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] = 3 #增量的大小,主飞机移动速度的快慢
elif event.type == pygame.KEYUP:
if event.key in offset:
offset[event.key] = 0
#计算增加x坐标增量,y坐标增量
offset_x=offset[pygame.K_RIGHT]-offset[pygame.K_LEFT]
offset_y=offset[pygame.K_DOWN]-offset[pygame.K_UP]
#飞机新坐标
#遇到边界问题,此原代码舍弃hero_pos=[hero_pos[0]+offset_x,hero_pos[1]+offset_y]
hero_x=hero_pos[0]+offset_x
if hero_x < 0:
hero_pos[0] = 0
elif hero_x > SCREEN_WIDTH - hero1.get_width():
hero_pos[0] = SCREEN_WIDTH - hero1.get_width()
else:
hero_pos[0] = hero_x
hero_y=hero_pos[1]+offset_y
if hero_y < 0:
hero_pos[1] = 0
elif hero_y > SCREEN_HEIGHT - hero1.get_height():
hero_pos[1] = SCREEN_HEIGHT - hero1.get_height()
else:
hero_pos[1] = hero_y
运行效果如下: