探索游戏引擎技术:从前端开发到游戏开发的跨越之旅

探索游戏引擎技术:从前端开发到游戏开发的跨越之旅

今天我们就来聊聊如何使用支持TSX、运行于原生平台的游戏引擎Dora SSR,帮助你轻松进入游戏开发的世界。

别担心,游戏引擎并不是什么高不可攀的技术,它和我们熟悉的前端开发工具有着惊人的相似之处。

开源游戏引擎_开源游戏引擎_开源的游戏有哪些

1.游戏客户端开发也可以是前端开发的一种

首先我们来解释一下什么是游戏引擎。

简单来说,游戏引擎是一些工具和库的集合,可以帮助开发人员构建游戏并管理图形、声音、物理计算或碰撞检测等。

对于前端开发人员来说,你可以将其视为专门为运行游戏而设计的特殊浏览器。

Dora SSR的游戏场景管理采用了类似HTML DOM的树形结构游戏开发素材,这是我们非常熟悉的。

想象一下,把 div 元素替换成游戏中的各种物体,把 CSS 动画替换成游戏动画,概念都差不多,代码写法可能也差不多开源游戏引擎游戏运营,是不是觉得很有趣呢?

2. 从 TypeScript 到 TSX:前端技术在游戏中的应用

许多前端开发人员熟悉 TypeScript 和 React 的 JSX 语法。

在Dora SSR开源游戏引擎中,我们通过支持TSX,提供了类似于前端开发编程模型的游戏开发接口。

是的,你没听错,就是那个 TSX。

使用 TSX 开发游戏意味着您可以利用现有的前端技术堆栈(组件、模块和其他现代前端技术),并在游戏开发中直接重用这些概念。

而且,Dora SSR的性能优化保证了它在复杂的游戏场景中也能流畅运行。

3. 挑战:用 100 行代码编写一款类似《愤怒的小鸟》的游戏

好了,理论讲得够多了,让我们来点实际的。

我们来看看如何用不到100行TSX代码在Dora SSR中编写一个类似《愤怒的小鸟》的游戏。

当然,在开始之前你还是需要准备好开发环境的,用Dora SSR来做这个很简单:装好安装包,打开浏览器,然后开始写代码,运行就可以了。

安装与启动请见:Dora启动!

()

开源游戏引擎_开源的游戏有哪些_开源游戏引擎

不小心在手机上安装了APK包?那么在同一个局域网内访问它,就可以直接在手机上进行开发和调试了。

1.编写最简单的游戏场景

在编写实际代码之前,我们可以编写一条专门的注释,这个注释可以告诉 Dora SSR 的 Web IDE 当我们按 Ctrl + S 保存文件时,自动对正在运行的代码进行热更新,从而实现代码运行结果的实时预览功能。

//@preview-file 开启

然后,我们导入必要的库和组件。

当然,我们的代码编辑器也会提示我们自动导入所需的模块,这可以在以后的编码过程中完成:

从'DoraX'导入{React,toNode,useRef};

从'Dora'导入{Body、BodyMoveType、Ease、Label、Line、Scale、TypeName、Vec2、tolua};

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

到节点();

OK,现在你已经基本掌握了朵拉SSR游戏开发的大部分技巧,开始制作你自己的游戏吧(认真的说)。

2.编写游戏盒子组件

接下来,游戏中碰撞的盒子将由 Box 组件定义,该组件接受

num、x、y 和 children 等属性:

接口 BoxProps {

num:数字;

x?: 数字;

y?:数字;

孩子?:任何|任何[];

const Box = (props: BoxProps) => {

const numText = props.num.toString();

返回 (

绘制节点>

{numText} 标签>

{props.children}

正文>

(英文):

};

我们使用类似 React 的函数组件来定义我们的盒子组件,其中:

3. 创建 TSX 实例化对象引用

使用 useRef 创建两个用于备份的引用变量,分别指向鸟和分数标签:

const bird = useRef();

const 分数 = useRef();

4. 创建发射线

发射线由线变量创建,并添加触摸(和鼠标单击)事件处理:

让开始 = Vec2.zero;

让 delta = Vec2.zero;

const 线 = 线();

到节点(

onTapBegan = {(触摸) => {

开始 = 触摸.位置;

行.清除();

}}

onTapMoved = {(触摸) => {

delta = delta.添加(触摸.delta);

线.设置([开始,开始.添加(delta)]);

}}

onTapEnded = {() => {

如果(!bird.current)返回;

鸟.当前.速度 = delta.mul(Vec2(10, 10));

开始 = Vec2.零;

delta = Vec2.零;

行.清除();

}}

{/* ...在物理世界下创建其他游戏元素... */}

5.创建其他游戏元素

接下来我们使用游戏场景的父标签,在其下继续创建游戏场景中的各个元素:

5.1 接地

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

绘制节点>

正文>

5.2 盒子

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

[10, 20, 30, 40, 50].map((num, i) => (

序列>

盒子>

))

序列组件:用于创建在父节点上播放的动画序列,包含以下动画:

5.3 鸟类

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

如果(其他标签!==''&&分数当前){

// 累积积分

const sc = parseFloat(score.current.text) + parseFloat(other.tag);

分数.当前.文本 = sc.toString();

// 清除命中框上的分数

const 标签 = tolua.cast(其他.子项?.last, 类型名称.标签);

如果(标签)标签.text ='';

其他.标签 = '';

// 播放盒子被击中的动画

其他.执行(比例(0.2,0.7,1.0));

}}>

绘制节点>

0 标签>

正文>

6.完成游戏逻辑

至此,我们已经完成了游戏的核心逻辑,你可以根据自己的想法进一步完善游戏逻辑,添加功能。

完整的演示代码可以在以下链接中找到:

以下是一些实际结果的截图。

开源游戏引擎_开源游戏引擎_开源的游戏有哪些

拖动屏幕启动愤怒的小鸟

开源的游戏有哪些_开源游戏引擎_开源游戏引擎

我技术很好,一杆进洞就拿下了所有分。

IV. 简要揭秘 1. 它是鹿还是马?

事实上,借助 Dora SSR 引擎的功能,我们编写的游戏代码可以保证在 Linux、Android、iOS、macOS 和 Windows 上运行结果一致。

但为了运行这段代码,我们的 Dora SSR 引擎甚至不支持 JavaScript 运行环境……(你说什么?)

是的,Dora SSR 的底层技术实现其实是基于 Lua 和 WASM 虚拟机作为脚本语言运行环境的。

对 TypeScript 的支持实际上是通过集成 TypescriptToLua 编译器提供的。

(‍eScriptToLua)

TSTL 重写了 TypeScript 语言编译器的后端,将 TS 和 TSX 代码编译成等效的 Lua 代码,以便 TS 代码可以在 Dora 上加载运行。

在Dora内置Web IDE的代码编辑器中开源游戏引擎,可以帮助进行TS语言的检查与补全以及Dora内置库API的提示。

至于最终的用户体验,就不用担心最后是鹿死谁手了,只要代码能通过TS编译检查,拉出来运行都一样。

2. 它和 React 相关吗?

目前对这个问题的答案是:是的,有(因此截至发布时还没有)。

React 最重要的能力就是通过 Virtual DOM 和 Tree Diff 处理来同步渲染组件的状态和业务数据。目前在 Dora SSR 中还没有实现这个机制,所以现在大家看到的用 TSX 编写的类似 VDOM 的构造代码在运行时只会做一次性的游戏渲染对象的构造,之后的处理将交由底层的 C++ 引擎函数来负责。

也许有一天我们会为游戏UI开发提供通过执行Tree Diff来同步状态的能力,类似于React,或者基于TSX实现其他渲染组件状态同步机制,类似于SolidJS。

因此我们诚挚邀请各位前端开发的朋友加入我们,一起玩朵拉SSR项目,研究如何运用前端开发技术思想为游戏开发推出更多好用、便捷的轮子。

最后我们的Q群来啦,欢迎大家来玩:

512620381

关于作者

李进:金融行业大数据工程师,Dora SSR、Yuescript开源软件作者。

项目简介

Dora SSR(多拉SSR)是一个用于在多种设备上快速开发2D游戏的游戏引擎。

其内置简单易用的开发工具链,支持在手机、开源掌上游戏机等设备上直接进行游戏开发。

开源游戏引擎_开源游戏引擎_开源的游戏有哪些

项目存储库

文章来源:https://dy.163.com/article/J5PTSHU00511CUMI.html