Pygame游戏开发之太空射击实战入门篇

目录
  • 视频
  • 入门
  • 游戏循环
    • 1. 处理输入(或事件)
    • 2. 更新游戏
    • 3. 渲染(或绘制)
    • 时钟
  • 构建 Pygame 模板
  • 渲染/绘制部分
  • 输入/事件部分
  • 控制屏幕刷新频率
  • 结束语
  • 本部分代码

视频

观看视频

入门

pygame

这是我们教程系列“使用 Pygame 进行游戏开发”的第 1 部分。它适用于对游戏开发和提高Python编码技能感兴趣的初学者/中级程序员。

什么是Pygame

Pygame是一个“游戏库” - 一套帮助程序员制作游戏的工具。其中一些内容是:

  • 图形和动画
  • 声音(包括音乐)
  • 控制(键盘、鼠标、游戏手柄等)

游戏循环

每个游戏的核心都是一个循环,我们称之为“游戏循环”。这个循环不断运行,一遍又一遍,做所有使游戏工作需要做的事情。每次游戏经历此循环时,称为帧。

每个帧,可能会发生许多不同的事情,但它们可以组织成三个不同的类别:

1. 处理输入(或事件)

游戏需要响应的任何内容。这些可能是键盘按键,鼠标移动等。

2. 更新游戏

更改框架上需要更改的任何内容。如果一个角色在空中,重力需要把它拉下来。如果两个物体相互碰撞,它们需要爆炸。

3. 渲染(或绘制)

在此步骤中,我们将在屏幕上绘制所有内容。背景、角色、菜单或玩家需要查看的任何其他内容都必须在屏幕上的正确位置绘制。

时钟

循环的另一个重要方面是控制整个循环的运行速度。您可能听说过术语FPS,它代表每秒帧数。这意味着此循环每秒应发生多少次。这很重要,因为您不希望游戏运行得太快或太慢。你也不希望它在不同的计算机上以不同的速度运行 。

构建 Pygame 模板

现在我们知道了使游戏正常工作需要哪些部分,我们可以开始编写一些代码了。首先,我们将制作一个简单的pygame程序,除了打开一个窗口并运行游戏循环之外,什么都不做。对于您想要制作的任何pygame项目来说,这都将是一个很好的起点。

在程序的顶部,我们将导入所需的库,并为游戏选项设置一些变量:

# Pygame 模板 - 游戏框架
import pygame
import random
WIDTH = 360  # 游戏窗口宽度
HEIGHT = 480 # 游戏窗口高度
FPS = 30 # 每秒帧数

接下来我们需要打开游戏窗口:

# 初始化pygame,创建窗口
pygame.init()
pygame.mixer.init()  # for sound
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()

pygame.init()是启动pygame并“初始化”。 将以screen建立游戏屏幕。最后,我们创建了一个能够确保游戏以我们想要的FPS运行的 clock

接下来是游戏循环了:

# 游戏循环
running = True
while running:
    # Process input (events)
    # Update
    # Render (draw)

这是我们的游戏循环,它是一个由变量控制的循环。如果我们想让游戏结束,只需要设置running = False就会结束循环。现在我们可以用一些基本代码填充每个部分。

渲染/绘制部分

我们将从*“绘制*”部分开始。我们还没有任何代码,但我们可以用纯色填充屏幕。为此,我们需要讨论计算机如何处理颜色。

计算机屏幕由像素组成,这些像素有 3 个部分:红色、绿色和蓝色。每个部分被点亮的程度决定了该像素是什么颜色,如下所示:

三种原色中的每一种都可以具有介于 0(关闭)和 255(100% 打开)之间的值,因此三种原色中的每一种都有 256 种不同的可能性。以下是您可以制作的一些颜色的一些示例:

您可以通过乘法找到计算机可以显示的颜色总数:

>>> 256 * 256 * 256 = 16,777,216

现在我们已经了解了颜色,让我们在程序的顶部定义一些:

# Colors (R, G, B)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

然后我们可以用黑色填充屏幕。

    # 绘制、渲染
    screen.fill(BLACK)

对于计算机显示的工作方式,这还不够。更改屏幕上的像素意味着让显卡告诉监视器更改实际像素。在计算机方面,这是一个非常非常缓慢的过程。因此,如果您在屏幕上要绘制很多东西,则可能需要很长时间才能全部绘制出来。我们可以通过使用称为双缓冲的东西以一种聪明的方式解决这个问题。这听起来很花哨,但它实际上只是意味着:

想象一下,我们有一个双面白板,可以翻转以显示一面或另一面。正面将是显示器(玩家看到的屏幕),而背面是隐藏的,只有计算机才能“看到”它。每一帧,我们所有的绘画都在背面。然后,当我们完成后,我们将板翻转过来并显示新框架。这意味着我们只做一个缓慢的过程,每帧与显示器交谈一次,而不是屏幕上的每一件事都这样做。

所有这些都在pygame中自动发生。你只需要告诉它当你完成绘图时翻转白板。实际上,该命令甚至被命名为:flip()

    # 绘制、渲染
    screen.fill(BLACK)
    # 绘制所有的事情后翻转显示
    pygame.display.flip()

如果你在flip()翻转后尝试画一些东西,它们不会显示在屏幕上!

输入/事件部分

我们还没有游戏,所以我们不能准确说出想要监听的键盘或鼠标按钮或其他控制事件。

如果您现在尝试运行该程序,您会发现自己遇到了问题:无法关闭窗口!单击角落中的“X”不起作用。那是因为这是一个事件,我们需要告诉我们的程序监听该事件并让它退出游戏。

事件可能随时发生。如果玩家在更新或绘制循环部分时单击“跳转”按钮,该怎么办?不要忽略这个输入, 玩家会感到沮丧。因此,Pygame所做的就是保存自上一帧以来发生的所有事件。这样,即使玩家快速捣碎许多按键,也能记录下来所有这些按钮。所有事件存放在一个列表,因此我们运行一个for循环来查看所有事件:

    for event in pygame.event.get():
        # 检查屏幕关闭事件
        if event.type == pygame.QUIT:
            running = False

Pygame有很多事件。 pygame.QUIT是单击“X”时发生的事件,因此我们设置running=False,游戏循环将结束。

控制屏幕刷新频率

我们还没有在“更新”部分中放入任何内容,但我们仍然需要使用FPS的设置来控制速度。我们可以这样做:

while running:
    # 保证以正常的速率循环
    clock.tick(FPS)

'tick()'命令告诉 pygame 每次循环需要多长时间,然后暂停多长时间,以使整个循环(即整个帧)持续正确的时间。如果我们设置FPS为 30,则意味着我们希望帧持续 1 30 \frac{1}{30} 301​ 或 0.03 秒。例如,如果我们的循环代码(更新,绘制等)只需要0.01秒,那么pygame将等待0.02秒。

结束语

最后,让我们确保当游戏循环结束时,我们实际上会破坏游戏窗口。通过将pygame.quit()放在代码的最后来做到这一点。所以我们的最终pygame模板看起来像这样:

# Pygame template - skeleton for a new pygame project
import pygame
import random
WIDTH = 360
HEIGHT = 480
FPS = 30
# define colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# initialize pygame and create window
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
# Game loop
running = True
while running:
    # keep loop running at the right speed
    clock.tick(FPS)
    # Process input (events)
    for event in pygame.event.get():
        # check for closing window
        if event.type == pygame.QUIT:
            running = False
    # Update
    # Draw / render
    screen.fill(BLACK)
    # *after* drawing everything, flip the display
    pygame.display.flip()
pygame.quit()

祝贺!你有一个有效的Pygame模板。用一个pygame template.py名字保存这个文件,这样你就可以在每次开始一个新的Pygame项目时重复使用它。

本部分代码

import pygame
import random
# WIDTH, HEIGHT = 360, 480
# WIDTH, HEIGHT = (360, 480)
# WIDTH = 360
# HEIGHT = 480
# SCREEN_SIZE = (WIDTH, HEIGHT)
SCREEN_SIZE = WIDTH, HEIGHT = 360, 480
FPS = 30
# Colors (R, G, B)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE)
pygame.display.set_caption("my game")
clock = pygame.time.Clock()
running = True
while running:
    clock.tick(FPS)
    # 1. 事件
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            running = False
    # 2. 更新组件状态
    # 3. 绘制图像
    screen.fill(BLACK)
    pygame.display.flip()

在下一教程中,我们将使用此模板作为学习如何在屏幕上绘制对象并使其移动。

到此这篇关于Pygame游戏开发之太空射击实战入门篇的文章就介绍到这了,更多相关Pygame太空射击内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 教你用Pygame制作简单的贪吃蛇游戏

    目录 1.序言 2.安装与导入 3.定义后续需要的参数 4.绘制蛇与食物 5.游戏规则与运行 6.成品展示 7.完整代码 总结 1.序言 目前基本上软测会用到的工具或者第三方库都已经被写完,本着不要逮着一只羊进行薅羊毛原则,换个赛道,这次就使用pygame库写个简单的贪吃蛇吧,当做熟悉python练手也是不错的. 2.安装与导入 使用pip install pygame进入安装,安装成功后导入所需模块: import pygame,sys,random from pygame.locals im

  • 利用Pygame制作躲避僵尸游戏

    目录 游戏玩法 property() 精灵类 初始画面 精灵移动函数 加载玩家 添加僵尸 添加血包 精灵相互碰撞事件 完整代码 游戏玩法 根据神庙逃亡,实现一个人躲避僵尸的小游戏,主要的是精灵.精灵组之间相撞.相交的处理. 游戏开始随机出现一定的僵尸,随机移动,玩家在一位置上,如果僵尸靠近玩家一定距离,则玩家持续掉血.玩家通过上下左右移动躲避僵尸,屏幕会随机刷新一个加血包,玩家吃了就会加一定的血,并在此刷新血包. property() 这个函数在类中返回新的属性 property(get,set

  • Pygame游戏开发之太空射击实战精灵的使用上篇

    目录 视频 使用精灵 什么是精灵 创建一个精灵 精灵运动 视频 观看视频 使用精灵 这是我们“使用 Pygame 进行游戏开发”教程系列的第 2 部分.您应该从第 1 部分开始:入门 什么是精灵 sprite 是一个计算机图形术语,指屏幕上可以移动的任何对象.当您玩任何2D游戏时,您在屏幕上看到的所有对象都是精灵.精灵可以是动画的,它们可以由玩家控制,甚至可以相互交互. 我们将在游戏循环的更新和绘制部分中负责更新和绘制精灵.但您可能可以想象,如果您的游戏具有大量精灵,那么游戏循环的这些部分可能会

  • Python+Pygame实战之泡泡游戏的实现

    目录 导语 一.环境安装 二.代码展示 三.效果展示 导语 泡泡王国 欢乐多多 咕噜噜,吹泡泡,七彩泡泡满天飘.大的好像彩气球,小的就像紫葡萄. ​当泡泡漫天飞舞时,大朋友.小朋友都会情不自禁地被它吸引.而当珍珠般的泡泡遇上可爱的程序员门时,又会出现什么样的美丽风景呢? 说到4399小游戏,没有人会陌生吧?我小时候经常趁着家长不在家的时候偷偷打开电脑打开小游戏的网页,在电脑桌前一坐就是一下午,真的不能赖我不适可而止,而是这些游戏真的太好 玩了!关于童年的经典游戏and有关泡泡的,之前已经仿写了一

  • Python+Pygame实战之吃豆豆游戏的实现

    目录 导语​ 一.首先 ​二.正式开始 三.效果展示 导语​ ​昨晚玩起了小时候玩的游戏“吃豆豆”,但是我发现,一局游戏三条命,我根本不能吃完所有的豆豆,总是被敌人吃掉 于是,我在想怎么能够保证我达到吃完所有豆豆的目标,然后我就想到了一个办法: 自己找资料找素材学习仿写了一款吃豆豆的小游戏,然后给我自己无限开挂! 哈哈哈!这不?完全解决了我的问题,完美的躺赢了!聪明的我.jpg 一.首先 1)素材 首先找到吃豆豆游戏的界面按照上面的素材找找准备下相似的图片!如下: 2)环境 本文的环境都跟之前的

  • Python+Pygame实战之疯狂吃水果游戏的实现

    目录 导语 一.准备中 1)游戏玩法 2)环境安装 3)素材准备 二.代码展示 三.效果展示 导语 嘿嘿!木木子今日闪现——已经给大家写了很多内容啦~ 涉及的人工智能.初学者.爬虫.数据分析(这方面的一般不过审核)游戏........ PS: 吃豆人我写过了哈 Python+Pygame实战之吃豆豆游戏的实现 切水果我写过了哈 Python Pygame实战之水果忍者游戏的实现 今天二者集合,做出一款新游戏,哈哈哈,名字叫做<疯狂

  • Python+Pygame实现之走四棋儿游戏的实现

    目录 导语 一.游戏解说 二.游戏规则 三.环境安装 四.代码展示 五.效果展示 导语 大家以前应该都听说过一个游戏:叫做走四棋儿 这款游戏出来到现在时间挺长了,小时候的家乡农村条件有限,附近也没有正式的玩具店能买到玩具,因此小朋友们聚在一起玩耍时,其玩具大多都是就地取材的. 直接在家里的水泥地上用烧完的炭火灰画出几条线,摆上几颗石头子即可.当时的火爆程度可谓是达到了一个新的高度.包括我当时也比较喜欢这款游戏.因为时间推移,小时候很多游戏都已经在现在这个时代看不到啦! 今天小编就带大家追忆童年—

  • Python+Pygame实现之见缝插针游戏的实现

    目录 前言 ​一.运行环境 二.代码展示 三.效果展示 ​总结 前言 姥姥说: 炎炎夏日热浪来袭. 有点让人无法忍受... 一动就是一身汗..... 想玩点小游戏都没地方玩了... <见缝插针>游戏小程序好玩吗?<见缝插针>小游戏怎么玩? 只有你想不到,没有我不会敲代码的好游戏!「良心好游戏推荐」——栗子同学强势来袭! 每天都会推荐好玩的小游戏.小编今天推荐这款游戏叫<见缝插针>,这是一个考验玩家首脑协调.反应力的小游戏,这种游戏很常见,居然还没有推荐过!今天赶紧来补上

  • 教你使用Python的pygame模块实现拼图游戏

    目录 pygame介绍 安装pygame pygame常用模块 pygame入门案例 pygame实现拼图游戏 总结 pygame介绍 Python Pygame 是一款专门为开发和设计 2D 电子游戏而生的软件包,它支 Windows.Linux.Mac OS 等操作系统,具有良好的跨平台性.Pygame 由 Pete Shinners 于 2000 年开发而成,是一款免费.开源的的软件包,因此您可以放心地使用它来开发游戏,不用担心有任何费用产生. Pygame 在 SDL(Simple Di

  • Pygame游戏开发之太空射击实战入门篇

    目录 视频 入门 游戏循环 1. 处理输入(或事件) 2. 更新游戏 3. 渲染(或绘制) 时钟 构建 Pygame 模板 渲染/绘制部分 输入/事件部分 控制屏幕刷新频率 结束语 本部分代码 视频 观看视频 入门 pygame 这是我们教程系列“使用 Pygame 进行游戏开发”的第 1 部分.它适用于对游戏开发和提高Python编码技能感兴趣的初学者/中级程序员. 什么是Pygame Pygame是一个“游戏库” - 一套帮助程序员制作游戏的工具.其中一些内容是: 图形和动画 声音(包括音乐

  • Pygame游戏开发之太空射击实战盾牌篇

    目录 视频 添加盾牌 伤害玩家 盾牌标尺 视频 本课程的视频 添加盾牌 现在,我们的玩家被一颗流星击中就摧毁.这不是很有趣,所以我们要向Player类添加一个shield属性,它是0 - 100 的数字. class Player(pygame.sprite.Sprite): def __init__(self): self.speedx = 0 self.shield = 100 现在,每当玩家被流星击中时,我们可以从盾牌中减去一点.当护盾达到0时,玩家被摧毁.为了让事情变得更有趣,我们可以通

  • Pygame游戏开发之太空射击实战图像精灵下篇

    目录 视频 图像精灵 变为图形精灵 在哪里可以找到艺术品 组织游戏组件 视频 观看视频 图像精灵 这是我们教程系列“使用 Pygame 进行游戏开发”的第 3 部分.它适用于对游戏开发和提高Python编码技能感兴趣的初学者/中级程序员.您应该从第 1 部分开始:入门 变为图形精灵 彩色矩形很好 - 它们是开始并确保游戏正常工作的好方法,但迟早你会想要为你的精灵使用很酷的宇宙飞船图像或角色.这就引出了第一个问题:您从哪里获得游戏图形. 在哪里可以找到艺术品 当您的游戏需要美术时,您有 3 种选择

  • Pygame游戏开发之太空射击实战敌人精灵篇

    目录 视频 敌人精灵 敌人精灵 生成敌人 视频 观看视频 敌人精灵 这是我们“Shmup”项目的第2部分!在本课中,我们将添加一些敌人的精灵供玩家躲避.在本系列课程中,我们将使用Python和Pygame构建一个完整的游戏.它适用于已经了解Python基础知识并希望加深对Python的理解并学习编程游戏基础知识的初学者. 敌人精灵 在这一点上,我们不需要担心我们的敌人精灵是什么,我们只想让它们出现在屏幕上.你可能会认为你的游戏是关于宇宙飞船躲避流星或独角兽躲避飞行的比萨饼 - 就代码而言,这并不

  • Pygame游戏开发之太空射击实战添加图形篇

    目录 视频 选择图形 加载图像 绘制背景 精灵图像 结束语 视频 本教程的视频 选择图形 我们谈到了Opengameart.org,这是免费游戏艺术的重要来源,也是我们最喜欢的艺术家之一“肯尼”.Kenney为我们的游戏制作了完美的艺术包“太空射击包”,你可以在这里找到: http://opengameart.org/content/space-shooter-redux 它有很多非常漂亮的图像,包括宇宙飞船,激光,小行星等等. 当您下载包时,它会解压缩到一堆不同的文件夹中.我们想要的是PNG文

  • Pygame游戏开发之太空射击实战子弹与碰撞处理篇

    目录 视频 碰撞 边界框 敌人与玩家碰撞 射击 子弹精灵 按键事件 生成子弹 子弹碰撞 视频 本教程的视频 碰撞 碰撞是游戏开发的基本组成部分.碰撞检测就是要检测游戏中的一个对象是否正在接触另一个对象.碰撞处理决定了当碰撞发生时你想要发生什么. 在我们的游戏中,我们目前有许多敌人的精灵沿着屏幕飞向玩家,我们想知道其中一个精灵何时出现.对于我们游戏的这个阶段,我们只会说敌人击中玩家意味着游戏结束了. 边界框 请记住,Pygame 中的每个精灵都有一个rect定义其坐标和大小的属性.Pygame中的

  • Pygame游戏开发之太空射击实战碰撞改进篇

    目录 视频 碰撞是怎么回事 设置精灵的半径 更改碰撞类型 结束语 视频 本教程的视频 碰撞是怎么回事 在上一次教程中,我们添加了图形,将精灵从普通矩形更改为更漂亮的PNG图像.然而,这带来了一个问题:有时游戏会认为玩家和流星之间发生了碰撞,而看起来他们根本没有击中.为了理解发生了什么,让我们看一个图: Pygame中的默认冲突类型是使用collide_rect()函数,该函数使用两个精灵的rect属性来计算它们是否重叠.这被称为AABB碰撞,它非常快速可靠.但是,如果精灵图像不是矩形,那么您会遇

  • Pygame游戏开发实例讲解之图形绘制与键鼠事件

    目录 图形绘制 绘制矩形 绘制直线 绘制圆弧 案例 键鼠事件 键盘事件 鼠标事件 图形绘制 格式: pygame.draw.circle(surface, color, center, radius, width=0, draw_top_right=None, draw_top_left=None, draw_bottom_left=None, draw_bottom_right=None) 参数: surface: 需要绘制的表面 color: RGB 格式, 圆形的颜色 center: 元组

  • Python图形用户界面与游戏开发实例详解

    目录 前言 基于tkinter模块的GUI 基于wxPython模块的GUI Pygame游戏开发 1.在游戏窗口中绘图 2.图形的处理 3.动画效果 4.碰撞检测 5.事件处理 总结 前言 对于使用过计算机的人,应该对图形用户界面(GUI)应该都不会太陌生,这里就不在赘述.那么对于python这样的动态语言有没有GUI相关的库呢?答案是肯定有的,那么常见的有哪些呢?主要有tkinter.wxPython.PyQt.PyGTK等模块,而tkinter是python默认的模块,没有功能特别强大的G

随机推荐