- 所有可见元素都是以矩形区域描述。
- 初始化游戏:
import pygame
from plane_sprites import *
# 初始化游戏
pygame.init()
# 编写游戏的代码
print("游戏的代码...")
# 游戏退出
pygame.quit()
- 使用
rect
描述英雄;rect
:定义矩形区域。
hero_rect = pygame.Rect(100, 500, 120, 125)
print("英雄的原点 %d %d" % (hero_rect.x, hero_rect.y))
print("英雄的尺寸 %d %d" % (hero_rect.width, hero_rect.height))
print("%d %d" % hero_rect.size)
# 创建游戏窗口
pygame.init()
# 创建游戏的窗口
screen = pygame.display.set_mode((480, 700))
# 绘制背景图像
# 1>加载图像数据
bg = pygame.image.load("./images/background.png")
# 2>blit 在屏幕绘制图像
screen.blit(bg, (0, 0))
# 3>update 更新屏幕显示
# pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero, (150, 300))
# 可以在所有绘制工作完成之后,统一调用update方法
# pygame.display.update()
# 创建时钟对象
clock = pygame.time.Clock()
# 1.定义rect记录飞机的初始位置
hero_rect = pygame.Rect(150, 300, 102, 126)
# 创建敌机的精灵
enemy = GameSprites("./images/enemy1.png")
enemy1 = GameSprites("./images/enemy1.png", 2)
# 创建敌机的精灵组
enemy_group = pygame.sprite.Group(enemy, enemy1)
# 游戏循环 ==> 意味着游戏的正式开始!
# 为了做到游戏程序启动后,不会立即退出
while True:
# 可以指定循环体内部执行的频率
clock.tick(60)
# 监听事件
for event in pygame.event.get():
# 判断时间类型是否退出事件
if event.type == pygame.QUIT:
print("游戏退出...")
# quit 卸载所有模块
pygame.quit()
# exit()直接终止当前正在执行的操作
exit()
"""# 捕获事件
event_list = pygame.event.get()
if len(event_list) > 0:
print(event_list)"""
# 2.修改飞机的位置
hero_rect.y -= 1
# 判断飞机的位置--两种方法
# 等飞机完全移出上屏幕再到下屏幕
# if hero_rect.y + hero_rect.height <= 0:
if hero_rect.bottom <= 0:
hero_rect.y = 700
# 3.调用blit方法绘制游戏背景
screen.blit(bg, (0, 0))
screen.blit(hero, hero_rect)
# 让精灵组调用两个方法
# update - 让族中的所有精灵更新位置
enemy_group.update()
# draw - 在screen上绘制所有的精灵
enemy_group.draw(screen)
# 4.调用update方法更新显示
pygame.display.update()
# 在游戏循环中监听事件;事件就是游戏启动后,用户针对游戏所做的操作
pygame.quit()
- 动画实现原理:快速 的在屏幕上 绘制图像,每次绘制的结果被称为 帧 ,每次
update
产生的结果称为 帧。 - 透明图片:
png
格式的图像是 支持透明 的。在绘制图像时,透明区域 不会显示任何内容 ,但是如果下方已经有内容,会透过透明区域显示出来。 images
图片资源链接: https://download.csdn.net/download/weixin_46361294/80027343?spm=1001.2014.3001.5501- 代码实现飞机大战地址:
- https://blog.csdn.net/weixin_46361294/article/details/122867674?spm=1001.2014.3001.5502