使用Pygame和PyPy

8
我刚接触Python,但我想通过制作游戏来学习它,而pygame似乎是最好的选择。由于PyPy是Python的最快实现(我认为),所以我决定使用它。 但我不知道如何将它们两个结合起来。
我使用的是Windows操作系统。
如果有人能够友好地给出一步一步的指导,我将不胜感激。
到目前为止,我已经安装(提取到文件夹中)了PyPy,并将pypy.exe设置为打开.py文件的默认程序,安装了Pygame并尝试运行一个示例.py文件。 但在文件的第一行导入时,出现“找不到pygame模块”的错误信息。

3
我建议先使用常规解释器学习Python和PyGame,然后在掌握一些知识之后再尝试使用PyPy。 - martineau
嗯,我以前有编程经验,所以学习不是问题。我甚至之前也用过Python,但不是很多。不过还是谢谢你的建议。看起来这是我的唯一选择。 - Luka Horvat
4个回答

9

pygame不与pypy兼容, 因此要使用它,您必须坚持使用cPython。


更新(2018年4月)

正如这个答案所指出的那样,PyPy v6.0版本现在可以与pygame一起使用——尽管还不支持当前稳定版本(pygame 1.9.3),但支持当前的开发分支(1.9.4.dev0)。

在Ubuntu 17.10上测试通过:

  • 下载并解压最新的Linux预编译版本
  • 安装pygame的构建依赖项:sudo apt build-dep python-pygame
  • 安装pip:./bin/pypy3 -m ensurepip
  • 安装pygame:./bin/pypy3 -m pip install 'Pygame>=1.9.4.dev0'
  • 运行演示:./bin/pypy3 -m pygame.examples.aliens

适用于pypy3和pypy2版本。


1
需要注意的是,这并不像听起来那么糟糕,因为PyGame大部分工作都是在C中完成,而不是Python。当然,你不会使用PyGame编写下一个Cyrsis,但是PyGame仍然可以用于编写一些非常有趣的游戏,而无需使用PyPy来JIT Python解释器。 - jlund3
1
我还没有测试过,但是通过搜索我看到了https://bitbucket.org/stefanor/pygame-pypy。有人尝试过吗? - Hophat Abc
自从v6版本以来,Pygame不再与PyPy不兼容。请参阅@afaulconbridge的[答案](https://dev59.com/xGvXa4cB1Zd3GeqPJn1X#50045201)和[PyPy v6.0发布说明](https://morepypy.blogspot.de/2018/04/pypy27-and-pypy35-v60-dual-release.html)。 - skrx
@skrx 感谢你的提示,我已经验证了它确实可以工作,这是在最初发布5年半之后... - mata

4
Pygame游戏实际上很少耗费时间来运行Python代码。绝大部分时间都花在执行SDL fillflip操作上。大多数的fill操作是不必要的。这有多重要呢?好吧,以我的电脑为例。比方说你写了一个只会在循环中将背景涂成一种颜色的游戏。它的帧率将会达到约40 fps。这是因为它基本是要逐个像素地进行处理并且写入。这每帧使用了200 x 300 = 60000次操作去做无用功。

所以,不要涂满整个背景,只需着重涂画在前一帧中已经被绘制的部分即可。

这会让您的代码变得稍微复杂一些,但它会产生巨大的性能提升。

此外,别忘了运行cProfile以查看问题区域。请注意,不要瞎猜。


这个答案实际上并没有回答如何在PyPy下运行PyGame的问题... - jlund3
不是,但这是相关信息,因为提问者选择PyPy是因为他认为需要它来提高速度。 - ninMonkey
1
@jlund3,没错,但我觉得这是一个XY问题 - Nick ODell

3

2
我们目前在软件包索引中没有PyPy的二进制文件。因此,您需要从源代码编译pygame,而不是仅使用pip安装pygame。
获取PyPy版本6+(或下载夜间版)。
可以使用在Windows上编译源代码的说明:https://www.pygame.org/wiki/CompileWindows
只需使用二进制文件代替即可。

嗨,René,你能看一下这个问题和我的回答吗? 当pygame窗口失去输入焦点时,“ACTIVEEVENT”的“state”为2,但是当它获得焦点时,“ACTIVEEVENT”的“state”为6。这是正确的还是有什么问题?我假设只有在窗口最大化或最小化时状态才为6。 - skrx
pip会自动进行编译,我只需使用pip install pygame和pypy3.8安装pygame。但是我需要设置ZLIB_ROOT环境变量。 - Octo Poulos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接