如何通过多线程和精灵动画实现3D网页RTS单位行为动画效果?
摘要:一、实验目的: 1、在上一篇的“RTS式单位控制”的基础上添加逻辑线程,为每个单位实现ai计算; 2、用精灵动画为单位的行为显示对应的动作效果。 二、运行效果: 1、场景中的单位分为红蓝两方,单位在发现敌对单位后向敌人移动: 2、进入攻击范
一、实验目的:
1、在上一篇的“RTS式单位控制”的基础上添加逻辑线程,为每个单位实现ai计算;
2、用精灵动画为单位的行为显示对应的动作效果。
二、运行效果:
1、场景中的单位分为红蓝两方,单位在发现敌对单位后向敌人移动:
2、进入攻击范围后对敌对单位发起攻击:
注意,单位在“移动”、“攻击”、“受伤”、“死亡”时分别播放不同的动画。
3、切换为RTS式控制后,可以选择单位并发布“移动攻击”命令:
有一些单位已经与敌人接触,优先执行攻击动作。
三、程序结构:
1、工程目录:
外层ASSETS目录保存了场景的地面贴图、天空盒、地形资源,内层ASSETS目录下是单位的精灵动画资源。(实际的github仓库里还有上篇文章的代码)
2、线程结构:
主线程中的TESTRTS.html是程序入口,负责初始化WebGL场景和与逻辑线程通信,babylon50.min.js是Babylon.js引擎库,newland.js是一个Web3D工具库,One.js是单位渲染代码,VTools.js是向量计算代码,ControlRTS3.js是rts控制代码,FrameGround2.js是地形生成代码,recast.js是群组导航库。主线程负责dom管理、WebGL场景的渲染、单位的群组寻路、单位的动画计算。
逻辑线程中的worker.js负责初始化逻辑环境、维持逻辑循环和与主线程通信,OneThink.js负责单位ai计算。逻辑线程和主线程间使用postMessage进行通信。
四、主线程初始化:
在之前的文章中介绍过的内容不再赘述,这里只讨论新增的部分,可在https://github.com/ljzc002/ControlRTS下载代码,国内访问github的一种方法见附录一。
