是否可以在浏览器中运行 pygame 或 pyglet?
- 2025-02-08 08:52:00
- admin 原创
- 56
问题描述:
我的电脑上安装了 3 个游戏库:pyglet、pygame 和 Panda3D。
我想创建一个 2D 游戏并将其制作成网络浏览器游戏,以便我可以将其放在 Facebook 上。
我知道Panda3D有一个网页浏览器插件。Panda3D主要用于 3D 游戏。
因此,我想问一下,是否可以在浏览器中玩pyglet或pygame游戏?如果不行,您推荐什么 Python 库?
解决方案 1:
pyglet 和 pygame 都无法在浏览器中运行。如果您的目标是 Web 浏览器,我根本不建议您使用 Python。JavaScript(带有 HTML5 Canvas)、Flash 或 Java 小程序更适合该环境。
如果您热衷于使用 Python,那么有许多项目可以将 Python 编译为 JavaScript。Python wiki 上提到了一些。以下是其中一些:
雕塑
睡衣
皮亚科
但是,您需要编写自己的图形和音频系统,因为这些项目都无法将 pyglet 和 pygame 所需的本机代码转换为 JavaScript。
解决方案 2:
今天,我建议使用来自https://pygame-web.github.io的pygbag。它使用与 Panda3D webgl 端口(不是旧插件)相同的原理,使用适用于现代浏览器的 Web Assembly。
安装:pip3 install pygbag
用法:python3 -m pygbag your_game_folder/main.py
使用 pygbag 工具,您可以在所有现代浏览器(以及 Safari iOS≥15)中直接托管/运行/打包您的 pygame-ce/panda3D 桌面项目。
它已经被广泛应用于2D 游戏开发,并且您也可以启动3D 项目。
您还可以在 REPLit 中将 pygame-ce wasm 与 pygbag 结合使用,以获得性能提升(使用过的人说效果非常好)。有关详情,请参阅https://github.com/pygame-web/pygbag/issues/110。
解决方案 3:
它需要一点重新编程,但我使用 Brython 和 GameJS 将 pygame 库“移植”到浏览器/nodewebkit。您可以在浏览器中使用 pygame 和 python 3 版本进行编程。您可以在https://github.com/asherwunk/pygjs查看它
解决方案 4:
在浏览器中运行 pygame 的另一种选择是使用pygbag。使用以下命令安装 pygbagpip install pygbag
pip install pygbag
将代码放在名为main.py的文件中,并像这样调整你的 pygame 代码:
import pygame
import asyncio
pygame.init()
# initializations: pygame.display.set_mode, ...
# [...]
def main():
run = True
while run:
# application loop: pygame.event.get(), pygame.display.flip(), ...
# [...]
await asyncio.sleep(0)
asyncio.run(main())
使用以下命令构建项目:
pygbag .
最小示例:
现场演示
import pygame
import asyncio
pygame.init()
window = pygame.display.set_mode((300, 300))
clock = pygame.time.Clock()
rect = pygame.Rect(0, 0, 20, 20)
rect.center = window.get_rect().center
vel = 5
async def main():
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
print(pygame.key.name(event.key))
keys = pygame.key.get_pressed()
rect.x += (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * vel
rect.y += (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * vel
rect.centerx = rect.centerx % window.get_width()
rect.centery = rect.centery % window.get_height()
window.fill(0)
pygame.draw.rect(window, "red", rect)
pygame.display.flip()
await asyncio.sleep(0)
pygame.quit()
exit()
asyncio.run(main())
解决方案 5:
一种选择是使用repl.it。它允许创建 Python/PyGame 脚本和多人编码。创建新repl时,选择 Pygame 模板:
例子: repl.it/@Rabbid76/PyGame-TransparentShapes
解决方案 6:
我刚刚发现这个网站https://trinket.io/features/pygame允许你从这个网站运行 pygame!但是它非常慢。它应该可以在你的浏览器中运行,但运行它需要很长时间。