事件机制EventSystemECS最重要的特性一是数据跟逻辑分离,二是数据驱动逻辑。什么是数据驱动逻辑呢?不太好理解,我们举个例子一个moba游戏,英雄都有血条,血条会在人物头上显示,也会在左上方头像UI上显示。这时候服务端发来一个扣血消息。我们怎么处理这个消息?第一种方法,在消息处理函数中修改英雄的血数值,修改头像上血条显示,同时修改头像UI的血条。这种方式很明显造成了模块间的耦合。第二种方法,扣血消息处理函数中只是改变血值,血值的改变抛出一个hpchange的事件,人物头像模块跟UI模块都订阅血值改变事件,在订阅的方法中分别处理自己的逻辑,这样各个模块负责自己的逻辑,没有耦合。ET提供了
一切皆实体目前十分流行ECS设计,主要是守望先锋的成功,引爆了这种技术。守望先锋采用了状态帧这种网络技术,客户端会进行预测,预测不准需要进行回滚,由于组件式的设计,回滚可以只回滚某些组件即可。ECS最重要的设计是逻辑跟数据的完全分离。即EC是纯数据,System实际上就是逻辑,由数据驱动逻辑。数据驱动逻辑是什么意思呢?很简单通过Update检测数据变化,通过事件机制来订阅数据变化,这就是所谓的数据驱动了。其它的特点例如缓存命中,在编写逻辑上来说并不太重要,现代游戏都用脚本,连脚本的性能都能容忍怎么会在乎缓存命中那点性能提升?ET在设计的时候吸收了这些想法,但是并不完全照搬,目前的设计是我经过长
单线程异步前面几个例子都是多线程实现的异步,但是异步显然不仅仅是多线程的。我们在之前的例子中使用了Sleep来实现时间的等待,每一个计时器都需要使用一个线程,会导致线程切换频繁,这个实现效率很低,平常是不会这样做的。一般游戏逻辑中会设计一个单线程的计时器,我们这里做一个简单的实现,用来讲解单线程异步。//example2_3classProgram{privatestaticintloopCount=0;privatestaticlongtime;privatestaticActionaction;staticvoidMain(string[]args){Console.WriteLine($
什么是协程说到协程,我们先了解什么是异步,异步简单说来就是,我要发起一个调用,但是这个被调用方(可能是其它线程,也可能是IO)出结果需要一段时间,我不想让这个调用阻塞住调用方的整个线程,因此传给被调用方一个回调函数,被调用方运行完成后回调这个回调函数就能通知调用方继续往下执行。举个例子:下面的代码,主线程一直循环,每循环一次sleep1毫秒,计数加一,每10000次打印一次。privatestaticvoidMain(){intloopCount=0;while(true){inttemp=watcherValue;Thread.Sleep(1);++loopCount;if(loopCoun
更好的协程上文讲了一串回调就是协程,显然这样写代码,增加逻辑,插入逻辑非常容易出错。我们需要利用异步语法把这个异步回调的形式改成同步的形式,幸好C#已经帮我们设计好了,看代码//example2_2classProgram{privatestaticintloopCount=0;staticvoidMain(string[]args){OneThreadSynchronizationContext_=OneThreadSynchronizationContext.Instance;Console.WriteLine($"主线程:{Thread.CurrentThread.ManagedThre
第一个eTSHarmonyOS项目使用eTS开发HarmonyOS应用eTS是一种脚本语言,与TypeScript和JavaScript使用语法相近,会让我们在使用上比较接近web开发,适合我们快速上手与学习。基本效果组件使用本处共使用两个组件,Text与Button,组件功能如下:Text组件:参数名参数类型必填参数描述contentstringResource否文本内容。包含子组件Span时不生效,显示Span内容,并且此时text组件的样式不生效。默认值:’’Button组件:参数名参数类型必填参数描述typeButtonType否描述按钮显示样式。默认值:ButtonType.Caps
什么是行为机顾名思义,类比状态机每个节点是一个状态,行为机每个节点是描述一种行为。行为机每个节点之间是互斥的,并且节点相互之间完全不用关心是怎么切换的。这里就不讲状态机跟行为树是怎么做ai的了,这里只讲用行为机怎么做一个ai。举个例子mmo中的小怪策划案,大致会这么写:小怪在出生点周围巡逻。发现周围有玩家则选择一个玩家做目标,追击该目标玩家,追到目标玩家则攻击目标玩家,发现距离出生点太远则返回,返回到出生点则继续巡逻1.定义ai的各种行为我们首先定义好怪物有哪些行为。很简单,我们直接根据策划案中的字面意思,怪物大致有这么几种行为:a.巡逻b.选择一个玩家追击并且攻击e.返回出生点。注意很多状态
AI框架1.几种AI的设计AI在游戏中很多,但是为什么大家总是感觉ai编写起来十分困难,我后来思考了一番,主要原因是使用的方法不当。之前大家编写ai主要有几种方案:a.状态机我是不知道谁想出来这个做法的,真是无力吐槽。本来对象身上任何数据都是状态,这种方法又要把一些状态定义成一种新的节点,对象身上状态变化会引起节点之间的转换,执行对应的方法,比如OnEnterOnExit等等。这里以怪物来举例,怪物可以分为多种状态,巡逻,攻击,追逐,返回。怪物的状态变化有:巡逻->追逐巡逻状态发现远处有敌人变追逐状态巡逻->攻击巡逻发现可以攻击敌人变攻击状态攻击->追逐攻击状态发现敌人有段距离于是去追逐攻击-
原文:100行代码实现“画图”应用,eTS开发走起!,点击链接查看更多技术内容。本期我们给大家带来的是“画图”应用开发者Rick的分享,希望能给你的HarmonyOS开发之旅带来启发~介绍2021年的华为开发者大会(HDC2021)上,HarmonyOS发布了新一代的声明式UI框架——方舟开发框架(ArkUI)。ArkUI框架引入了基于TS扩展的声明式开发范式,让开发变得更加简洁、高效! 已经有很多开发者在使用eTS(extendedTypeScript)语言,基于声明式开发范式开发应用了。本期我们要介绍的就是eTS开发先行者Rick的分享——100行代码实现“画图”应用,带大家一起领略eTS
前言:在先前的鸿蒙ArkUIets开发的学习中,笔者已经对基础的页面布局、数据连接、图片动画的绘制的知识进行了分享。这次我们同样来分享ets开发的学习基础UI知识,但这次我们返璞归真,从最基础的视图创建开始学习。夯实基础才能在今后的学习中融会贯通,相信通过这次的学习,对之前分享的内容能收获更多。本篇是以HarmonyOS官网的基于TS扩展的声明式开发范式文档,体验声明式UI的创建简单视图为基础进行编写。所以笔者将原文进行整合,提取出其中的要点,以便通俗易懂地呈现给读者,希望能帮助你快速了解Harmony的ETS开发,学会简单的视图创建与布局构建的学习。本篇最后会贴上参考原文链接。首先讲一下大致