pygame游戏如何发布到网页

1

Pygame是一个Python库,用于开发2D视频游戏。要将Pygame游戏发布到网页,你需要将游戏转化为HTML5或者WebAssembly(WebAssembly, Wasm)格式,因为Pygame是基于本地计算机的,不能直接嵌入到网页中运行。以下是一种常见的方法:

1. 使用Pygame Zero:Pygame Zero是一个简化版的Pygame,它可以直接生成HTML5游戏文件,不需要额外的打包工具。你可以在Pygame Zero的官方文档中找到如何使用它创建和发布游戏到网页的教程。

2. 使用Emscripten:Emscripten是一个JavaScript的编译器,可以将C/C++(包括Pygame)代码编译为能在浏览器运行的WebAssembly。你需要将Pygame代码转换为C/C++,然后使用Emscripten编译。这是一个稍微复杂的过程,需要一些编程基础。

3. 使用WebAssembly:另一种方法是将Pygame游戏的C/C++代码编译为WebAssembly,然后与HTML、CSS、JavaScript结合,通过WebAssembly的运行环境在浏览器中运行。这同样需要一些高级编程和Web开发知识。

4. 使用游戏引擎:如Phaser、GDevelop等游戏引擎,它们提供了将游戏打包为HTML5游戏的功能,可以直接发布到网页。

无论哪种方法,都需要一定的技术知识和经验。如果你不熟悉这些技术,可能需要寻求专业人士的帮助或者寻找现成的解决方案。

除此之外,对于 Pygame 窗口中显示的所有内容来讲,如果内容发现变化之后就需要进行flip,否则修改的内容并不能更新到窗口。

它可以帮助我们将一个图像从一个地方“块移”(就是复制啦)到另一个地方。移到哪里呢?我们需要设定一个起始位置,即: x 轴(水平方向)、y 轴(垂直方向)。 在 Pygame 中, 这两个数是从从窗口左上角的 [0, 0] 坐标开始的。

运行代码之后,pygame的窗口并没有出现图片这是因为图片加载完成后,我们需要将像素从一个地方复制到另一个地方。像素复制在编程中有一个特殊的名字,叫做块移(blitting)。

pygame游戏如何发布到网页

当程序正常运行之后,接下来我们想办法在窗口中插入一张图片, 在 Pygame 中,使用图像最简单的方法就是利用 image 函数, pygame.image模块有一个load()函数,可以帮我们加载图片。

Pygame最重要的部分是表面。我们可以把表面想象成一张白纸。你可以用表面做很多事情:画线、填充颜色、复制图像等。这个表面可以是任何尺寸的,我们设置的是800(宽)*600(高)的大小。试着运行这个程序三国类游戏大全单机版下载,你会发现有一个黑黑的窗口一闪而过。

Pygame是免费的,在GPL许可下发布,你可以创建开源,免费,免费软件,共享软件,和商业游戏。 Pygame已经存在很多时间了,许多优秀的程序员加入其中,把Pygame做得越来越好。

Pygame是一组专门为编写游戏设计的Python模块,增加了SDL库功能。可以使你在Python语言中轻松地创建全功能的游戏和多媒体程序。

Python实战:运用Pygame编写Flappy bird小游戏,我能玩一天

4.接下来我们还需要设置管子出来的方式,首先,我们要做到当第一个管子快要接触到左边的时候,要在右边添加一个新的管子,然后当左边的管子消失的时候移除掉管子,同时在你过了管子的时候要打印出分数,并且还能累计。

程序员奶爸必修课——用 pygame 写小游戏

基于这样的思路,我想起了以前在哪里看过的一个小游戏————七彩同心圆。它的玩法就是每次点击鼠标时,会以鼠标为圆心画一个圆,然后在这个圆的基础上不断向外扩展圆(类似于水波浪的扩散),从而形成一个同心圆,并达到随机大小后停止扩展,其中每个同心圆的颜色都是随机的。

我们想用一张图片替代 Surface 对象。我们将使用 pygame.image.load() 导入图片的路径。load() 方法将会返回一个 Surface 对象。我们然后在这个 Surface 对象上调用 convert() 创建副本,这样可以更快地将它画在屏幕上。

这才是 PyGame 的魅力所在!写冲突代码(collision code)很难,但是 PyGame 提供了很多冲突检测方法,你可以在这里查看其中一部分。本次教程使用 spritecollideany。spritecollideany() 接受一个 Sprite 对象和一个 Sprite.Group ,检测 Sprite 对象是否和 Sprite Group 中的其他 Sprites 冲突。这样,我们可以拿 Player 和敌人所在的 Sprite Group 对比,检测 player 是否被敌人击中。代码实现如下:

Pygame 提供的另一个很有用的对象是 Sprite 的 Groups。诚如其名,是 Sprite 的集合。为什么我们要使用 sprite.Group 而不是列表呢? 因为 sprite.Group 有一些内建的方法,有助于解决冲突和更新问题。那现在就创建一个 Group,用来包含游戏中的所有 Sprites 。创建完 Group 后,我们要将 Player 添加到里面,因为它是我们目前唯一的 Sprite 。我们也可以为敌人创建一个 group 。 当我们调用 Sprite 的 kill() 方法时,sprite 将会从其所在的全部 group 中删除。

现在你可以使用方向键移动矩阵块了。也许你注意到了,你可以将矩形块移出屏幕,这可能并不是你想要的。所以我们我们需要往 update 方法中添加一些逻辑,检测矩形的坐标是否移出了 800x600 的屏幕边界;如果出了边界,那么就将它放回在边界上:

如果将 screen.blit(player.surf,(400,300)) 改成 screen.blit(player.surf,player.rect) ,你觉得会发生什么?修改之后,试着在控制台中打印 player.rect 。rect 的前两个属性分别是 rect 左上角的 x 和 y 轴坐标。当你将 rect 传递给 blit ,它将会根据这个坐标画 surface 。我们后续将使用它控制 player 移动。

什么是 Sprites ?从编程术语来讲,Sprites 是屏幕上事物的二维表达。本质上来讲,Sprite 就是一个图片。Pygame 提供一个叫做 Sprites 的基础类,它就是用来扩展的,可以包含想要在屏幕上呈现的对象一个或多个图形表示。我们将会扩展Sprite 类,这样可以使用它的内建方法。我们称这个新的对象为 Player 。Plyaer 将扩展 Sprite,现在只有两个属性:surf 和 rect。我们也会给 surf 涂色(本教程使用白色),如之前 surface 例子,只是现在 Surface 属于 Player :

注意在 blit 之后的 pygame.display.filp() 的调用。Flip将会更新自上次 flip 后的整个屏幕,两次 flip 之间发生的修改都将在屏幕上显示。没有调用flip()那就什么也不会出现。

blit() 有两个参数:要画的 Surface 和 在源 Surface 上的坐标。此处我们使用屏幕的中心,但是当你运行代码时,你会发现我们的 surf 并没有出现在屏幕的中心。这是因为 blit() 是从左上角开始画 surf 。

仅仅只是创建了 Surface 并不能在屏幕上看到它。为此我们需要将这个 Surface 绘制(Blit)到另一个 Surface 上。Blit 是一个专业术语,意思就是绘图。你仅仅只能从一个Surface Blit 到另一个Surface,我们的屏幕就是一个 Surface 对象。以下是我们如何将 surf 画到屏幕上:

Surface和 Rects是 PyGame 中的基本构件。可以将 Surface 看作一张白纸,你可以在上面随意绘画。我们的屏幕对象也是一个 Surface 。它们可以包含图片。Rects 是 Surface 中矩形区域的表示。

将上述代码添加到之前的代码下,并运行。你应该看到一个空的窗口。只有你按下 ESC 键 或者触发一个 QUIT 事,否则这个窗口不会消失。

运行上述代码,将会弹出一个窗口,然后当程序退出后又立即消失。一点都不酷嘛,对吧?下一节,我们将介绍游戏的主循环,它将确保只有在我们给它正确的输入时程序才会退出。

与其他 Python 程序一样,我们首先导入想要使用的模块。这里,我们将导入 pygame 和 pygame.locals ,后续我们将使用其中的一些常量。最后一行会初始化所有导入的 PyGame 模块,在做其他操作之前必须执行调用该函数。

打开PyGame下载页面,根据你的操作系统和 Python 版本下载合适的 PyGame 安装包。如果你使用的是 Python 3,那么请下载 1.9.2 版.

PyGame是 SDL 库的 Python 包装器(wrapper)。SDL 是一个跨平台库,支持访问计算机多媒体硬件(声音、视频、输入等)。SDL 非常强大,但美中不足的是,它是基于 C 语言的,而 C 语言比较难懂,因此我们采用 PyGame 。

译者:haiyuqiao,华中科技大学(在读研究生),正在使用 Python 做数据分析。Fighting from now!校对:EarlGrey,编程派主页君。

今天分享的是 Python 翻译组 最新译文,原文来自real python,是一篇比较详细的 PyGame 游戏开发入门指南。

编程派坚信,这个时代人人都学点编程,不论对自身成长还是日常工作,都将有巨大益处。因此,选择了通过本公号与大家分享最易学的编程语言 Python 的教程和资源,希望对你有帮助。

dnf手游韩服开盒子轻松做游戏!Pygame库详解:使用Python进行游戏开发的完整指南

blit是个重要函数,第一个参数为一个Surface对象,第二个为左上角位置。画完以后一定记得用update更新一下,否则画面一片漆黑。

游戏的主循环是一个无限循环,直到用户跳出。在这个主循环里做的事情就是不停地画背景和更新光标位置,虽然背景是不动的,我们还是需要每次都画它, 否则鼠标覆盖过的位置就不能恢复正常了。

这段代码中用到了两张图片,图片可以从网上找,让后用ps简单修改一下就行。(sea.jpg是背景,fish.png是黄色小鱼,fish.png是我用ps抠出来的,背景是透明的)

刚开始学习一门编程语言的时候总会写一个Hello World程序,但那只是在终端上打印一句话,现在我们来点更帅的!写好以后会是这样子的效果:

另外说一下,就产品而言,Pygame更致力于2D游戏的开发,也就是说,你可以用Pygame写一个植物大战僵尸,但是写一个魔兽世界则相当困难……请不要做出鄙夷的目光,底层的东西永远是相通的,而且对于新手而言,从简单的2D入手才是正途。

SDL是用C写的,不过它也可以使用C++进行开发,当然还有很多其它的语言,Pygame就是Python中使用它的一个库。Pygame已经存在很多时间了,许多优秀的程序员加入其中,把Pygame做得越来越好。

Pygame是一个利用SDL库的写就的游戏库,SDL呢,全名Simple DirectMedia Layer,是一位叫做Sam Lantinga的大牛写的,据说他为了让Loki(致力于向Linux上移植Windows的游戏的一家大好人公司,可惜已经倒闭,唉好人不长命啊……)更有效的工作,创造了这个东东。

专题: 单机三国版游戏   吃三国单机游戏   单机游戏老三国