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