目录
前言:
昨天我们已经初步的去了解了关于面向对象的小游戏的初始化,和更新屏幕,今天我们将继续去学习面向对象的后面的制作,当然这些都是我个人的学习内容,可能不是很全面,如果我有哪里有问题也欢迎大家给我斧正,也可以私信我.
今天我先教大家比较完整的pygame的使用:
1.pygame的使用:
1.1 安装pygame:
首先,确保你已经安装了pygame库。如果没有,你可以使用pip(Python的包管理器)来安装它:
pip install pygame
1. 2导入pygame
在你的Python脚本中,你需要导入pygame模块才能使用它
import pygame
1.3初始化pygame
在使用pygame的任何功能之前,你都需要调用pygame.init()
函数来初始化pygame库:
pygame.init()
1.4 创建窗口
使用pygame.display.set_mode()
函数来创建一个窗口。这个函数接受一个元组作为参数,元组中的两个值分别代表窗口的宽度和高度:
screen = pygame.display.set_mode((0, 0))
1.5设置窗口标题
你可以使用pygame.display.set_caption()
函数来设置窗口的标题
pygame.display.set_caption("My Game")
1.6. 游戏循环
游戏通常运行在一个循环中,这个循环会不断地处理事件、更新游戏状态并绘制图像到屏幕上。下面是一个简单的游戏循环的例子:
running = True
while running:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT: # 如果用户点击了关闭按钮
running = False # 退出游戏循环
# 在这里添加你的游戏逻辑代码
# 更新屏幕显示
pygame.display.flip() # 或者使用 pygame.display.update()
1.7. 加载图像
如果你想在游戏中使用图像,你可以使用pygame.image.load()
函数来加载它们:
image = pygame.image.load('path_to_your_image.png')
1.8. 绘制图像
使用blit
方法来将图像绘制到屏幕上。这通常在一个循环中完成,例如在上面的游戏循环中:
screen.blit(image, (x, y)) # x和y是图像左上角的坐标
1.9. 更新屏幕
在绘制了所有内容之后,你需要使用pygame.display.flip()
或pygame.display.update()
来更新屏幕显示:
pygame.display.flip()
1. 10. 退出pygame
当你的游戏结束时,确保调用pygame.quit()
来清理并退出pygame:
pygame.quit()
1.11. 帧率控制
通常,你还需要控制游戏的帧率,以确保游戏运行得不过快或过慢。你可以使用pygame.time.Clock()
对象来实现这一点:
clock = pygame.time.Clock()
# 在游戏循环中
clock.tick(60) # 这将限制游戏循环到每秒60次迭代
2.关于游戏的内容
2.1游戏的循环和游戏的时钟
游戏的动画实现:跟电影的原理相似,游戏中的动画效果,本质上是快速的在屏幕上绘制图像.多张图像快速的,连续的播放,产生的连贯效果
一般电脑上每秒绘制60次,就能达到很高品质的动画效果,每次绘制的结果被称为帧.
2.2游戏初始化:
设置游戏窗口,首先,你需要使用pygame
来初始化一个游戏窗口。这通常是通过调用pygame.init()
来完成的,然后你可以使用pygame.display.set_mode()
来创建一个指定大小的窗口。
import pygame
pygame.init()
# 设置游戏窗口大小
screen = pygame.display.set_mode((480, 700))
pygame.display.set_caption('飞机大战')
2.3绘制图像初始位置
在游戏初始化阶段,你还需要设置游戏中所有精灵(如背景、敌机、英雄飞机等)的初始位置。这通常是在各个精灵类的__init__
方法中完成的
# 创建背景精灵
background = Background()
# 创建英雄飞机精灵
hero = Hero()
# 创建敌机精灵
enemies = pygame.sprite.Group()
for i in range(5):
enemy = Enemy()
enemies.add(enemy)
2.4设置游戏时钟
为了控制游戏的帧率(即每秒更新的次数),你需要设置一个游戏时钟。这可以通过pygame.time.Clock()
来实现
# 设置游戏时钟
clock = pygame.time.Clock()
2.3游戏循环:
游戏循环是游戏的主体部分,它不断运行直到用户退出游戏。在这个循环中,你会设置刷新帧率、检测用户的交互、更新所有图像的位置以及更新屏幕显示。
2.3.1设置刷新帧率:
在游戏循环中,你需要控制游戏的刷新率,这通常是通过调用clock.tick()
方法来实现的,并传入你想要的帧率(例如60帧/秒)
# 游戏主循环
running = True
while running:
# 设置刷新帧率
clock.tick(60)
# ... (其他代码,如事件处理、更新、绘制等)
2.3.2检测用户的交互:
在每次循环中,你需要检测用户的交互,例如键盘输入和鼠标点击。这可以通过pygame.event.get()
来实现。
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 可以添加其他事件处理,如按键检测等
2.3.3更新所有图像的位置:
接下来,你需要更新所有精灵的位置。这通常是通过调用每个精灵的update()
方法来实现的。
# 更新背景位置
background.update()
# 更新英雄飞机位置
hero.update()
# 更新敌机位置
enemies.update()
2.3.4更新屏幕显示
最后,你需要将更新后的图像绘制到屏幕上。这通常是通过调用pygame.display.flip()
来实现的
# 绘制背景
screen.blit(background.image, background.rect)
# 绘制英雄飞机
screen.blit(hero.image, hero.rect)
# 绘制敌机
for enemy in enemies:
screen.blit(enemy.image, enemy.rect)
# 更新屏幕显示
pygame.display.flip()
2.4简单的动画实现:
实现飞机的移动
While True:
clock.tick(60)
#更新图片位置
me_rect.y-=1
#调用blit方法绘制位置
#绘制背景
s.blit(img2,(0,o))
s.blit(me,me_rect)
pygame.display.update()
pass
2.5游戏中的监听事件:
事件:event,游戏启动后,用户针对游戏所做的所有操作,例如:点击鼠标,按下键盘
监听:在游戏循环中,判断用户的具体操作,捕捉到用户的操作之后,才能有针对性的做出响应
通过pygame.event.get()可以获取当前用户所做事件列表
for event in pygame.event.get(): # event是列表中的事件对象pygame.event.get()获取的是列表3
if event.type == plane_sprites.ENEMY_EVENT: # 每隔一秒执行这里的内容
print('敌机出场')
# 在这里实例化创建精灵,添加到精灵组,分开写,可以重复出现飞机,精灵组只要一个就可以了,精灵可以重复
enemy = plane_sprites.Enemy() # 在内部不断地循环
self.enemy_group.add(enemy)
elif event.type == plane_sprites.FIRE:
print('子弹出场')
self.hero.fire()
elif event.type == pygame.QUIT:
pygame.quit()
2.6精灵和精灵组
在Pygame中,pygame.sprite.Sprite
是一个基类,用于创建游戏精灵(Sprite)。精灵通常代表游戏中的可移动对象,如玩家角色、敌人、子弹等。每个精灵通常都有一个图像(image
)和一个矩形区域(rect
),该矩形区域定义了图像在游戏世界中的位置和大小
pygame.sprite.Sprite()#:创建精灵对象()
def __init__(self:)
2.6.1存储图像数据image,和图像位置rect
# 加载精灵的图像
sprite_image = pygame.image.load('path_to_your_image.png').convert_alpha()
# 创建rect对象,它包含位置和大小信息
self.rect = pygame.Rect(x, y, width, height)
2.6.2更新所有精灵组
# 创建精灵组
sprite_group = pygame.sprite.Group()
# 将精灵添加到精灵组
sprite_group.add(my_sprite)
# 在游戏循环中更新所有精灵
sprite_group.update()
2.6.3添加精灵
def add(): #向组中添加精灵
def draw(): #让组中所有的精灵对象通过blit方法绘制到屏幕上
def update():# 让组中的所有精灵对象调用自己的update方法
def add(): #向组中添加精灵
def draw(): #让组中所有的精灵对象通过blit方法绘制到屏幕上
def update():# 让组中的所有精灵对象调用自己的update方法