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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • python飞机大战 pygame游戏创建快速入门详解

    本文实例讲述了python飞机大战 pygame游戏创建.分享给大家供大家参考,具体如下: 目标 项目准备 使用 pygame 创建图形窗口 理解 图像 并实现图像绘制 理解 游戏循环 和 游戏时钟 理解 精灵 和 精灵组 项目准备 新建 飞机大战 项目 新建一个 hm_01_pygame入门.py 导入 游戏素材图片 游戏的第一印象 把一些 静止的图像 绘制到 游戏窗口 中 根据 用户的交互 或其他情况,移动 这些图像,产生动画效果 根据 图像之间 是否发生重叠,判断 敌机是否被摧毁 等其他情

  • Android 游戏开发入门简单示例

    在Android系统上开发游戏是Android开发学习者所向往的,有成就感也有乐趣,还能取得经济上的报酬.那怎样开发Android游戏呢?下面介绍一个简单的入门实例.        一.创建新工程 首先,我们在Eclipse中新建一个名为Movement的工程,并且选择合适的Android SDK,在这里,我们选用的API是比较低的1.5版本,这样可以让其适应性更强.接下来,我们新建两个类,一个是UpdateThread类,一个是SurfaceView类,它们在项目中分别是负责处理线程和画面的两

  • 网页游戏开发入门教程三(简单程序应用)

    网页游戏开发入门教程二(游戏模式+系统)http://www.jb51.net/article/20724.htm 一.选择开发语言 后台:java .net php 前台:flex javascript ajax 数据库:mysql mssql 用哪种组合,真的不重要.重要的是时间和成本.复杂的地方在数据的交互和完善,而不在技术或效果的实现.往往遇到一些问题.比如地图如何编?人物移动如何实现?其实这些问题从技术上实现都比较容易.难在实现后,数据如何交互.没有解决数据交互的问题,实现这些技术点的

  • 初学者的福音:游戏开发新手入门指南

    我经常被问及:一个具有很少甚至没有编程经验的人要如何开始游戏制作.直到目前为止,我总是尽我所能一个一个解答.然而,问题的数量已经增长到了一个难以处理的水平,于是,我便决定把所有的建议汇总在一篇文章里作为参考提供给人们. 这篇文章主要面向那些想开发自己的游戏,但仅有一点点或没有半点编程经验的人们.实际上,我也假定读者根本没有任何的编程知识.我将把重点放在游戏开发的编程和设计方面,而不是艺术方面.我也不准备对游戏行业进行论述(因为这个话题的资料太多了),但是,我会带你浏览一下在制作游戏之前需要做的一

  • 网页游戏开发入门教程二(游戏模式+系统)

    一.游戏模式目前webgame游戏模式大体上可以分为以下四类:1.玩家拥有一个城市,不断的升级城市内建筑,建筑可以自动获得物资,可以生产军队,军队之间进行对比数值的战斗.这里我简单的称为Ogame模式. 比较优秀的代表:战神世界II,Travian,Ogame,武林三国,纵横天下,领主online,乱舞春秋,热血三国,方便面三国等等.这是一个比较成熟的模式, 但正因为成熟.因此,玩家接触到这类游戏比较的多,除非你能超过这些优秀的代表,否则就只是简单的重复开发. 对玩家来说:优点:Ogame模式模

  • python飞机大战pygame游戏框架搭建操作详解

    本文实例讲述了python飞机大战pygame游戏框架搭建操作.分享给大家供大家参考,具体如下: 目标 明确主程序职责 实现主程序类 准备游戏精灵组 01. 明确主程序职责 回顾 快速入门案例,一个游戏主程序的 职责 可以分为两个部分: 游戏初始化 游戏循环 根据明确的职责,设计 PlaneGame 类如下: 提示 根据 职责 封装私有方法,可以避免某一个方法的代码写得太过冗长 如果某一个方法编写的太长,既不好阅读,也不好维护! 游戏初始化 -- init() 会调用以下方法: 游戏循环 --

  • python飞机大战pygame游戏之敌机出场实现方法详解

    本文实例讲述了python飞机大战pygame游戏之敌机出场实现方法.分享给大家供大家参考,具体如下: 目标 使用 定时器 添加敌机 设计 Enemy 类 01. 使用定时器添加敌机 运行 备课代码,观察 敌机的 出现规律: 游戏启动后,每隔 1 秒 会 出现一架敌机 每架敌机 向屏幕下方飞行,飞行 速度各不相同 每架敌机出现的 水平位置 也不尽相同 当敌机 从屏幕下方飞出,不会再飞回到屏幕中 1.1 定时器 在 pygame 中可以使用 pygame.time.set_timer() 来添加

  • Android数字华容道小游戏开发

    目的 上周新一期的最强大脑出来了,虽然上季被称为最强黑幕,不过呢.我决定还是看看= =.它里面第一关是叫做数字华容道.说白了,就是和拼图差不多.一开始我准备下一个玩玩的.结果没搜到.所以决定写了一个.最后效果差不多是这样: 思路以及实现 首先,我们应该考虑如何去实现这个效果.细想一下,其实和之前的2048有点像,但是又不是完全一直.于是,便又折腾了一波.这次布局和内容项参考之前2048的,下面放上代码: 自定义一个frame layout,我们先绘制里面的数字: private void ini

  • 总结Python图形用户界面和游戏开发知识点

    基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述.Python默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter),从这个名字就可以看出它是基于Tk的,Tk是一个工具包,最初是为Tcl设计的,后来被移植到很多其他的脚本语言中,它提供了跨平台的GUI控件.当然Tk并不是最新和最好的选择,也没有功能特别强大的GUI控件,事实上,开发GUI应用并不是Python最擅长的工作,如果真的需

  • C#编程中常见数据结构的比较(Unity3D游戏开发)

    一.前言 Unity3D是如今最火爆的游戏开发引擎,它可以让我们能轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型的互动内容.它支持2D/3D游戏开发,据不完全统计,目前国内80%的手机游戏都是用Unity3D开发. 由于Unity3D在开发过程中使用最多的是C# 语言,所以就要合理的使用C#提供的一些数据结构是非常有必要的,合理的选择数据结构可以加快开发速度,提高游戏运行性能,不合理的使用数据结构则会导致游戏运行性能降低,加大开发复杂程度! 先通过表格看看常用的数据结构: C#常用数据

随机推荐

其他