Skip to content

【番外#001】Python开发游戏如何选择引擎?

1.介绍

使用Python开发游戏,大多数情况下都会直接想起 PyGame 这个库。但是,PyGame本身是基于SDL的,没有3D支持,并不是一个完整的游戏引擎库。可以当作一个新手入门的玩具,不适合正式项目的开发。

Panda3D 是一款3D游戏引擎库,带有完整的3D游戏引擎模块,支持Python和C++,官方也在一直持续更新迭代。

Panda3D的Python绑定是自动生成的,核心库使用C++开发,这对我们日后可能需要使用C++重构项目提供了非常可靠的基础。不过,稍微有点遗憾的是Panda3D没有官方的移动端支持,但是我们目前没有移动端计划,所以最终决定使用Panda3D来开发。

Panda3D 能实现什么效果?

这里给大家看下 Github 上一位大佬的技术作品,用Panda3d Python版本实现的 PBR(基于物理渲染)延迟渲染管线 效果。

传送门: PBR RenderPipeline

森林

alt text

材质 Demo

alt text

屏幕空间反射

alt text

汽车渲染

alt text

alt text

插件和时间编辑器

alt text

地形和体积云

alt text

视频展示

2.Panda3D

  1. 官网:https://www.panda3d.org/

  2. 最新版本: 1.10.10

  3. 官方支持: Windows, macOS, Ubuntu

3.安装与使用

  • Panda3D SDK for Windows: 带有MakeNSIS
  • Python: 3.8
  • OS: Windows 10
  • Panda3D: 1.10.10
shell
pip install panda3d==1.10.10

4.First App

代码

  • main.py
python
# -*- encoding: utf-8 -*-

import sys
from direct.showbase.ShowBase import ShowBase

class MyApp(ShowBase):

	def __init__(self):
		ShowBase.__init__(self)

		self.accept("space", self.updateKeyboard, ["space"])
		self.accept("w", self.updateKeyboard, ["w"])
		self.accept("q", self.updateKeyboard, ["q"])

	def updateKeyboard(self, keycode):
		if keycode == 'q':
			sys.exit()

		print('Pressed', keycode)

if __name__ == '__main__':
	app = MyApp()
	app.run()
  • setup.py
python
# -*- encoding: utf-8 -*-

from setuptools import setup

setup(
	name="Demo",
	options = {
		'build_apps': {
			'gui_apps': {'Demo': 'main.py'},
			'platforms': [
				'win_amd64'
			],
			'plugins': [
				'pandagl',
			],
		},
		'bdist_apps': {
			'installers': {
				'win_amd64': 'nsis'
			}
		}
	}
)

运行结果

Snipaste_2021-11-15_00-03-10

5.发布

Windows平台使用NSIS打包需要将SDK中的MakeNSIS目录添加到Path中。

shell
pip freeze > requirements.txt
python setup.py build_apps
python setup.py bdist_apps