前端时间导师安排开发一个3D的强化学习环境,其实也就等于开发一个特定场景的游戏。经过一段时间的调研与实践,在这里分享下自己的经验,希望能对你有所帮助。
其实最开始的时候,导师问,能做成3D的么,要是不行的话,2D的也行。TM,当时就是嘴贱,否则也不至于后面几个月愁的头发直掉😹。
废话不多说,下面开始正文部分。
目前Python语言还是非常流行的,加上做机器学习,基本上也没有别的开发语言的选择,所以在语言的选型上是没有纠结的空间的。
那Python能开发游戏么,答案是肯定的,并且python在开发游戏上,也有不少优秀的游戏的游戏引擎可以使用。首先就是PyGame,老牌的游戏引擎,开发文档齐全,网上教程多,许多python游戏开发书籍都是以PyGame为主体的。还有就是cocos-2d,一款非常好用的游戏引擎,博主以前使用过JS版本的开发过一个游戏,使用其提供的IDE,非常方便,没想到也提供了Python版本。当然还有其他比较流行的引擎,就不在一一赘述了。
我也找到了一个大佬使用python开发的游戏,大家可以参考下,github地址.
哎,上面两款好用的引擎都是开发2D游戏的,心塞,只能继续探索。
经过调研,主要把目光发在了以下三款引擎上,OpenGL、Pyglet、Panda3D。
OpenGL(Open Graphics Library),意为“开放式图形库”,是一个编写2D和3D应用程序的跨平台API。OpenGL 不是一个独立的平台,因此,它需要借助于一种编程语言才能被使用。C / C++ / Python / Java 都可以很好支持 OpengGL。Python版本的OpenGl模块名为PyOpenGL
听着是不是很厉害,也确实很厉害。但是太难了,学习成本过于高了。。在看了几篇介绍文档后,我就放弃了。
参考资料如下,有兴趣的可以看下。
Pyglet 是一个易于使用但功能强大的库,用于在 Windows、Mac OS 和 Linux 上开发视觉丰富的 GUI 应用程序,如游戏、多媒体等。这个库完全是用 Python 创建的,它支持许多功能,如窗口、用户界面事件处理、操纵杆、OpenGL 图形、加载图像和视频以及播放声音和音乐。
在刚一接触PyGlet,就感觉很棒,很易用,当时也跟着文档做了一个小行星游戏,页面如下:
并且将这个小游戏和Gym进行了整合。
还尝试了加载3D模型,展示如下,当时一度觉得就是他了,可以是后面还是遇到了一些很难解决的问题。
参考文档:PyGlet官方文档。
当时被Pyglet折磨了一段时间后,便动了换路线的想法。网上看了Panda3D的入门介绍(类似于编程学习中的HelleWorld😹),哦,这有点意思哦。跟着教程,十几分钟做了简单的场景,截图如下:
感觉很不错,模型的加载、渲染、动画的执行都很便捷,便进行了更深入的了解,开发了一个小Demo,当时心里就大呼:是他是他就是他。。。
在使用Panda3D的过程中,也遇到了相关内容过少的问题。Panda3D虽然技术很强,可以实现很多功能,但是其被设计给有丰富相关经验的人使用的,对于刚入门的小白不是很友好,加上国内的用户实在是少,所以相关的解决方案基本上也是很难找到。还好其开发文档比较全(全英文😭),根据文档,可以解决入门时的阵痛。
想去BiliBili上找找视频教程,只找了一个博主从Yutubu上下载下来上传的视频,好难啊,英语听力是在是不过关,最后也只能放弃。
不过Panda3D还是很强大的,至少可以解决我所有的需求,虽然过程很痛苦。
参考文档:Panda3D官方文档。
没想到吧,还有第四个选择。这个是我在检索信息的时候看到的,Unity 3D开放对Python的支持,并且官方提供了一组用于强化学习的3D环境,Github地址。
经验主义害死人呀,做3D游戏,第一印象想到的就是Unity,但是其官方开发语言是C#,就一直没想到使用他,后悔呀。但是我使用Panda3D已经开发过半,项目时间也很紧张,也就没有时间在选择换技术了。Unity3D for python我还没有尝试,也不知道效果如何,不过背靠Unity这个大树,相信其功能、易用性上应该没什么问题,后面使用过会在进行分享。
本文到这就结束了,每个游戏引擎都有自己的优势,我们也是根据不同的使用需求选择合适的技术。后面会分享Panda3D的使用经验,有需要的可以持续关注,有什么疑问,也可以在评论区留言。
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o