问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

给前端同学看的跨平台游戏开发入门

发布网友 发布时间:2024-10-01 22:05

我来回答

1个回答

热心网友 时间:2024-10-14 09:27

大家好,我是一个游戏引擎技术探索者,同时也是一名做过不少前端开发工作的程序员。如果你想知道如何从编写网页到开发游戏,那你来对地方了!

今天我们来聊聊如何使用 Dora SSR,一个支持 TSX 且跨平台在 native 运行的游戏引擎,助你轻松跨入游戏开发的世界。不必担心,说到游戏引擎并不是啥高不可攀的技术,反而和我们熟悉的前端开发工具可以有惊人相似之处。

首先,让我们解释一下什么是游戏引擎。简单来说,游戏引擎就是一套工具和库的集合,帮助开发者构建游戏,管理图形、声音、物理计算或碰撞检测等。对于前端开发者来说,你可以把它想象成就是一种特殊的浏览器,专门用来运行游戏。

Dora SSR 的游戏场景管理使用了类似于 HTML DOM 的树形结构,这对我们来说再熟悉不过了。想象一下,将 div 元素换成游戏中的各种对象,CSS 动画换成游戏动画,概念也差不多,代码写法上可能也差不多,是不是觉得有点意思了?

许多前端开发者都熟悉 TypeScript 和 React 的 JSX 语法。在 Dora SSR 开源游戏引擎中,我们通过支持 TSX,提供了与前端开发编程模式相似的游戏开发接口。是的你没听错,就是那个 TSX。

使用 TSX 开发游戏,意味着你可以利用已有的前端技术栈——组件、模块和其他现代前端技术,直接在游戏开发中复用这些概念。而且,Dora SSR 的性能优化确保了即使是在复杂的游戏场景中,也能保持流畅的运行。

好了,理论知识够多了,让我们来点实际操作吧。来看看如何在 Dora SSR 中用 100 行以内的 TSX 代码编写一个类似“愤怒的小鸟”的小游戏。当然,在开始之前还是要准备开发环境,做这个事用 Dora SSR 就很简单:我有一个安装包一装,我有一个浏览器一开,嗯,开始写代码运行吧。更详细安装启动请参见: Dora 启动!

在编写实际的代码之前,我们可以先写一个有特别功能的注释,它可以告诉 Dora SSR 的 Web IDE 在我们按下 Ctrl + S 保存文件时,自动热更新运行的代码,以实现代码运行结果的实时预览功能。

然后,我们引入必要的库和组件。当然我们的代码编辑器也会提示辅助我们自动引入需要的模块,可以放到后面编码过程中再完成:

在 Dora SSR 中显示一个图片很简单,只要使用标签,最后通过toNode()函数将标签实例化为一个游戏对象就可以了。

好的,至此你已经基本掌握大部分 Dora SSR 游戏开发的诀窍了,可以开始你自己的游戏开发之旅啦(认真)。

接下来我们在游戏中碰撞的箱子会由Box 组件定义,它接受 num、x、y 和 children 等属性:

我们使用仿 React 的函数组件的写法来完成我们箱子组件的定义,其中:

使用 useRef 创建两个引用变量进行备用,分别指向小鸡和分数标签:

发射线由line 变量创建,并添加触摸(同时也是鼠标点击)的事件处理:

接下来,我们以 作为游戏场景的父级标签,在它下面继续创建游戏场景中的各个元素:

5.1 地面

首先,我们使用body 组件创建一个地面,并将其设置为静态刚体:

5.2 箱子

接下来,我们使用之前写好的Box 组件创建 5 个箱子,并设置不同的初始位置和分数,在创建时播放出场动画:

5.3 小鸟

最后,我们使用body 组件创建小鸟,并设置碰撞形状、外观和分数标签:

至此,我们已经完成了小游戏的核心逻辑。你可以根据自己的想法进一步完善游戏逻辑和增加功能。完整的 demo 代码可以见这个链接: Dora-SSR/Assets/Script/Test/Birdy.tsx。下面是一些运行效果的截图。

事实上我们写的这段游戏代码,在 Dora SSR 引擎的能力下是可以确保在跨 Linux、Android、iOS、macOS 和 Windows 获得一致的运行结果。但是为了运行这段代码,我们的 Dora SSR 引擎甚至都没有做 JavaScript 运行环境的支持……(你说什么?)

是的,Dora SSR 的底层技术实现其实是基于 Lua 和 WASM 虚拟机作为脚本语言运行环境的。对 TypeScript 的支持其实是通过整合了 TypescriptToLua( github.com/TypeScriptTo... )这个编译器提供的。TSTL 通过重新编写了 TypeScript 语言编译器的后端,将 TS 和 TSX 的代码编译为了等价运行的 Lua 代码,从而使得 TS 代码可以在 Dora 上加载运行。在 Dora 自带的 Web IDE 的代码编辑器下,可以帮助大家做 TS 的语言检查和补全以及 Dora 内置库 API 的提示。最终的使用体验,大家就可以不用管最后是鹿还是马,只要代码能通过了 TS 的编译检查,拉出来那都是一样的跑啦。

这个问题的答案目前是:可以有(所以截至发文前还没有)。React 最重要的能力是通过 Virtual DOM 和执行 Tree Diff 处理的过程来进行渲染组件和业务数据的状态同步,目前这个机制还没有在 Dora SSR 中实现,所以大家目前看到的用 TSX 编写出的类似 VDOM 的构建代码只会在运行时做一次性的游戏渲染对象的构建,往后都是底层 C++ 实现的引擎功能在负责继续处理。也许有一天我们会为游戏 UI 的开发,提供仿 React 通过执行 Tree Diff 做状态同步的能力,或是仿 SolidJS 基于 TSX 实现其它的渲染组件状态同步的机制。所以,在这里也诚挚地邀请广大前端开发的朋友们,加入我们,一起玩 Dora SSR 项目,一起研究怎么运用前端开发技术思想,为游戏开发也引入更多好用便捷的轮子吧。

最后我们的Q群在这里,欢迎过来玩:512620381

项目官网: dora-ssr.net/zh-Hans
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
脾基本简介 人体有2个脾脏吗 百度百科 人的脾有几个 我是无锡的,公司需要办理健康证,请问应该到哪里去办理? 儿童健康小常识:让宝宝快乐成长 如何构建认罪认罚案件相对不起诉适用标准 相对不起诉概述 杨笠脱口秀称男人没底线,直言没有男人生活会更幸福,你认可吗? 每个人都是独立的个体都有自己生活的选择方式和权利,别人不要干涉... ...人观点,是我的自由、我的权利别人无权 干涉”这种观点 请问最近我老公最近老在qq群那瞎聊天,说些带人嫖的话,又说自己是好人... 十分钟快速上手Next.js 买了外带的笔记本键盘用,会不会损伤到笔记本啊 笔记本外插键盘是否对笔记本有危害? ...JD MILK TEA SHOP SMART注册过商标吗?还有哪些分类可以注册... 禁毒手抄报最火的一句 调侃检察官的句子 咸鸭蛋怎么腌蛋黄才会出油 五羊本田小公主摩托车是什么牌子减震器 平安大/小福星20有缺点吗? 小女明年想考武汉外校高中,请问哪儿可找到近期外校考试卷 平安小福星保险怎么样,性价比高吗?值得入手吗? 天天水群是什么心理,有什么意义? 不良反应程度分级 网商银行贷款好申请吗 请问网商银行贷款条件有哪些啊? 发现新型冠状病毒感染的肺炎病人或疑似病人的报告时限是怎么规定的 手机密码锁忘记了。手机怎么才能开呢。能维修解锁吗? ...处理器512M内存,请问我的手机可以用平板电脑的用的QQ吗 联想平板电脑s5000如何视频聊天 老公搞群聊我生气了,现在回家不当我的面搞群聊了好吗 老公与女同学有群聊还要私聊我该怎么办?关键是老公知道那女人作风不正... 五行属土多子多福的朱姓女孩名字有哪些? 船舶与海洋工程专业是干嘛的 哪些大学开设了船舶与海洋工程专业 airpods有电总是蹬蹬蹬自己响 airpods总是自己蹬蹬蹬是怎么回事 airpods有电总是蹬蹬蹬自己响怎么回事呢? AirPods有电总是蹬蹬蹬自己响怎么回事? 越黄如何选择 右脚脚心痛什么原因 右脚脚心下面一点疼是什么原因 贝米钱包300元可以赚多少钱 右脚脚心酸痛怎么回事 500千瓦发电机一小时用多少柴油 - 知百科 500千瓦发电机组每小时多少油耗? 遇到政治漫画类试题,该怎么解 ...下图所示政治漫画《美国的噩梦》(图下部的文字为:AMERICA UNDER COMMU... 法国某报刊上有一幅政治漫画,内容为“义和团杀外国人为野蛮”,“外国人... 经常喝酒对身体有哪些伤害