当前位置: 首页 > news >正文

为什么Python不适合写游戏?

知乎上有热门个问题:Python 能写游戏吗?有没有什么开源项目?

Python可以开发游戏,但不是好的选择

Python作为脚本语言,一般很少用来开发游戏,但也有不少大型游戏有Python的身影,比如:

  • 坦克世界大战(作为用户端脚本)
  • 文明IV(作为地图编辑器脚本)
  • 战场2(作为游戏玩法脚本)
  • 模拟市民(作为mod脚本)
  • 新战前夜(作为服务器和客户端语言)
  • 迪士尼-卡通城(提供 Panda3D 引擎图形)

虽然这些游戏支持python,但python扮演的角色大多作为脚本和插件,并非游戏开发的主语言。

目前市场上多数游戏都是基于C++、Java等语言进行开发,主要它们都是静态语言,比较稳定且速度快,能够满足游戏高性能的需求。

比如《绝地求生》、《巫师3》、《黑暗之魂》等都是用C++开发的,《碟中谍III》、《Minecraft》、《FIFA 11》等都是用Java开发的。

Python因为注重编码效率而非计算性能,在速度和稳定性上无法与其他语言媲美,几乎很少有商业游戏是纯Python开发的。

但Python可以通过脚本和第三方引擎为大型游戏提供组件,比如上述提到的几款游戏。

而且Python可以快速创建游戏原型,帮助开发者进行试验和debug,作为辅助工具还是不错的。

可以尝试一些Python开源小游戏

Github上有一些基于Python开发的开源小游戏,有兴趣可以试试看。比如说基于Python Pygame库开发植物大战僵尸。

原项目:marblexu/PythonPlantsVsZombies

该游戏仓库主要包含三部分:游戏代码、游戏素材、数据库

游戏代码就是Pygame库提供框架,然后python搭建游戏规则,全部代码将近3000行。

游戏素材主要包括僵尸、植物、背景等图片,图片会导入进游戏界面,然后写动态事件过程来实现游戏画面。

数据库是用json来存储游戏过程数据,这里包括了位置、时间、关卡等。

我专门录了个视频讲解下如何去下载,并在本地电脑执行。

还有很多小游戏可以用Python实现,我觉得是非常有趣的过程,初学者可以玩玩。

比如这个github仓库提供了很多免费小游戏的代码和demo:

grantjenks/free-python-games

Python游戏开发的主要框架

Python有很多游戏开发框架,比如说

PyGame:PyGame在优秀的SDL库之上添加了更多功能。允许使用python语言创建功能齐全的游戏和多媒体程序。具有高度的可移植性,几乎可以在所有平台和操作系统上运行

PySoy:Python 3的高级3D游戏引擎,紧密结合了渲染,物理,动画和网络

Pyglet:用于opengl的跨平台窗口和Python的多媒体库,可在mods / bfheores / python文件夹中找到

Python-Ogre: 用于OGRE 3D引擎的完整python包装器,以及用于GUI,物理,特效,声音等的15个其他图形和游戏相关库

Panda3d:专门用于python的全功能开源3d引擎,但用c ++编写。功能:性能,多平台支持,场景图,导出/导入,3D音频,碰撞检测,物理,浏览器插件,动画等

Blender3D:GNU GPL许可下的开源游戏引擎器,动画师和3D渲染器。使用Python作为脚本语言

利用Python开发游戏来学习语法是比较好的选择

对于Python初学者来说,虽然不为了做游戏,但通过写游戏来学习语法是很好的方法,唯有多动手才能掌握编程的真谛。

相关文章:

  • React 应用实现监控可观测性最佳实践
  • 【中间件】docker数据卷
  • 使用Docker搭建YesPlayMusic网易云音乐播放器并发布至公网访问
  • 小米汽车正式发布:开启智能电动新篇章
  • MongoDB内存过高问题分析解决
  • ChatGPT与传统搜索引擎的区别:智能对话与关键词匹配的差异
  • |行业洞察·趋势报告|《2024旅游度假市场简析报告-17页》
  • VSCode 如何同步显示网页在手机或者平板上
  • C语言数据结构基础——排序
  • 影视文件数字指纹签名检验系统的用户操作安全大多数
  • 数据库管理开发工具Navicat for MySQL Mac版下载
  • 在js中push的使用方法总结;
  • webpack源码分析——makeCacheable函数和weakMap的缓存应用场景
  • 自动化测试 —— Pytest fixture及conftest详解
  • CentOS常用功能命令集合
  • [LeetCode] Wiggle Sort
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 【知识碎片】第三方登录弹窗效果
  • 2019.2.20 c++ 知识梳理
  • EventListener原理
  • Java多线程(4):使用线程池执行定时任务
  • Java反射-动态类加载和重新加载
  • node学习系列之简单文件上传
  • SwizzleMethod 黑魔法
  • vue脚手架vue-cli
  • windows下使用nginx调试简介
  • 服务器之间,相同帐号,实现免密钥登录
  • 高度不固定时垂直居中
  • 全栈开发——Linux
  • 如何胜任知名企业的商业数据分析师?
  • 《天龙八部3D》Unity技术方案揭秘
  • 仓管云——企业云erp功能有哪些?
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #Linux(权限管理)
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $.ajax()
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (2022 CVPR) Unbiased Teacher v2
  • (52)只出现一次的数字III
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Python第六天)文件处理
  • (SpringBoot)第二章:Spring创建和使用
  • (一) storm的集群安装与配置
  • (一)kafka实战——kafka源码编译启动
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)可以带来幸福的一本书
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • 。Net下Windows服务程序开发疑惑
  • @PreAuthorize注解
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [android] 请求码和结果码的作用
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)