pygame
初始化:pygame.init()
退出:pygame.quit()
import pygame
pygame.init()
print("游戏的代码")
pygame.quit()
输出结果:
游戏的代码
游戏的坐标系
游戏窗口左上角定义为原点(0,0)
在游戏中,所有可见元素都是以矩形定义的,(x,y)(width,height)
专门定义矩形的类,pygame.Rect
Rect(x,y,width,height)
Rect.size返回元组,内容是width,height
import pygame
hero_rect = pygame.Rect(100,500,120,125)
print("英雄的原点 %d %d"%(hero_rect.x,hero_rect.y))
print("英雄的尺寸:%d %d"%(hero_rect.size))
输出结果:
英雄的原点 100 500
英雄的尺寸:120 125
创建游戏主窗口:pygame.display
pygame.display.set_mode()初始化游戏显示窗口
pygame.display.update()刷新屏幕内容显示
set_mode(屏幕大小(元组))返回屏幕窗口,必须记录返回值,因为后续将在此窗口上来绘制不同图像。
import pygame
pygame.init()
#创建游戏窗口480*700
screen = pygame.display.set_mode((480,700))
pygame.quit()
输出结果为定义大小的黑色屏幕。
实现图像绘制:1.使用pygame.image.load()加载图像数据
2.调用对象.blit(图像,位置)将图像绘制到指定位置。
3.调用pygame.display.update()更新图像
设置背景:
import pygame
pygame.init()
#创建游戏窗口480*700
screen = pygame.display.set_mode((480,700))
#绘制背景图像
#1加载图像数据
bg = pygame.image.load("./images/background.png")
hero = pygame.image.load("./images/me1.png")
#2blit绘制图像,对象名.blit
screen.blit(bg,(0,0))
screen.blit(hero,(200,500))
#update
pygame.display.update()
while True:
pass
pygame.quit()
事件:用户的具体操作
监听:捕获用户所做的具体操作。event_list = pygame.event.get()返回列表
如果一个类的 父类 不是 object在重写 初始化方法 时,一定要 先 super() 一下父类的 init 方法保证父类中实现的 init 代码能够被正常执行
精灵:pygame.sprite.Sprite()存储图像数据image和位置rect的对象
重点:两个属性,一个方法;属性image、rect; 方法:update(*args)更新精灵位置
精灵组:pygame.sprite.Group
一个精灵组可以包含多个精灵对象;调用精灵组对象的update() 方法可以自动调用组内每一个精灵的 update() 方法;调用精灵组对象的draw(屏幕对象) 方法可以将组内每一个精灵 的 image 绘制在 rect 位置 。
精灵负责封装图像信息和位置并且封装运动速度,提供update方法
根据游戏需求更改自己位置
精灵族包含多个精灵对象,update方法让精灵组中的所有精灵调用
update方法的精灵更新位置,
draw(screen)方法在screen上绘制精灵组中的所有精灵
关于精灵详细实例:
import pygame
#定义一个精灵类
class GameSprite(pygame.sprite.Sprite):
#飞机大战游戏精灵
#初始化
def __init__(self,image_name,speed = 1):
#调用父类初始化方法,初始化方法扩展,
# 如果不调用父类方法,则原来父类初始化中的很多属性被覆盖
super().__init__()
#定义对象属性
#要想在图像文件中加载数据,使用pygame.image.load()
self.image = pygame.image.load(image_name)
#rect默认大小为刚加载出来的图片大小
#image的getrect()方法可以返回刚刚加载的图像大小
self.rect = self.image.get_rect()
self.speed = speed
#重写update方法,实现不同精灵不同移动速度
def update(self):
self.rect.y += self.speed
飞机大战快速入门案例:(调用精灵)
#直接导入,必须用模块.方式使用
import pygame
#from...as...直接使用模块提供的工具
from plase_sprites import *
pygame.init()
#创建游戏窗口480*700
screen = pygame.display.set_mode((480,700))
#绘制背景图像
#1加载图像数据
bg = pygame.image.load("./images/background.png")
hero = pygame.image.load("./images/me1.png")
#2blit绘制图像,对象名.blit
screen.blit(bg,(0,0))
screen.blit(hero,(150,300))
#update
pygame.display.update()
#创建时间对象
clock = pygame.time.Clock()
#游戏循环,意为游戏正常开始
#1.定义rect记录飞机起始位置
hero_rect = pygame.Rect(150,300,102,126)
#实现敌机精灵创建
enemy = GameSprite("./images/enemy1.png")
enemy1 = GameSprite("./images/enemy2.png",2)
#实现敌机精灵组创建
enemy_group = pygame.sprite.Group(enemy,enemy1)
while True:
#每秒重复执行60次,控制游戏循环内部代码执行频率
clock.tick(60)
#监听事件
for event_list in pygame.event.get():
#判断事件类型是否为退出事件
if event_list.type == pygame.QUIT:
print("游戏退出。。。")
# 调用quit方法卸载所有模块
pygame.quit()
#调用exit函数终止当前程序,退出程序
exit()
#2.修改飞机位置
hero_rect.y -= 1
#判断飞机位置
if hero_rect.y <= -126:
hero_rect.y = 700
# 3.调用blit方法绘制图像
screen.blit(bg, (0, 0))#去掉飞机残影,先绘制背景,遮挡之前图片
screen.blit(hero,hero_rect)
#4.让精灵组调用两个方法,1.调用update让所有精灵更新图像
enemy_group.update()
#2.draw在screen上绘制所有精灵图片
enemy_group.draw(screen)
pygame.display.update()
pygame.quit()