CutTheKnob 进度展示 进度 帧同步逻辑帧更新实现 √ 单例、日志工具制作 √ 创建双方英雄 √ 逻辑与渲染分离的脚本编写 √ 定点数的导入与使用 √ 绑定英雄逻辑对象和渲染对象 √ 战斗行动BattleActionManager编写 √ 移动类编写与测试 √ 攻击动画播放 √ 攻击动效生成 √ 伤害与飘字表现 √ 血条制作,动画处理,位置更新 √ 过程中遇到的问题 DeltaTime的计算 (已理解,笔记撰写完成)渲染帧的DeltaTime理解 定点数中一些细节问题(已理解,笔记撰写完成)帧同步定点数相关,为什么要用定点数 Spine中某些骨骼动画播放时有错乱 (已解决,见下文) 框架加载,英雄,血条创建的顺序问题 (暂时解决,可讨论,见下文) 有记录意义的会另外开一篇写,然后到时候引用 Spine骨骼动画播放错乱 做的时候发现小人播放Attack动画的时候,衣服乱飞,仔细观察了下衣服上也是有骨骼数据的,猜测是在切换动画时,由于上一个Idle动画的衣服骨骼数据与Attack动画的衣服骨骼数据不一致,然后Attack动画会把衣服拉过来。 鉴于此,查阅了下Api,发现有可以清理动画轨道数据的方法。 因此,只需要在播放动画之前,把之前的动画轨道数据清理一次即可解决这个问题。 if (m_SpineAnim != null) { m_SpineAnim.AnimationState.ClearTracks(); //播放前先进行清理 m_SpineAnim.AnimationState.SetAnimation(0, animName, isLoop); } 框架加载,英雄,血条创建的顺序问题 用的是铸梦老师的DMVC框架,经过一番打印和阅读源码,大致理清一个World的运行顺序大致如下 加载数据层 加载网络消息层 加载逻辑层 调用World的OnCreate() 我一开始把UI界面的打开放到了World的Oncreate() 又把Hero相关逻辑和渲染脚本的创建放到了逻辑层里 这就导致了,Hero在加载血条的时候,UI界面还未创建出来,因而无法加载。 我一开始是想,在UI界面里分发事件,然后Hero监听,收到事件后,再尝试去创建血条。 但是这样做,就比较麻烦了。这个问题实质上就是加载顺序的问题,所以我们应该先弄清楚依赖关系。 从上面可以分析出,我们的加载顺序应该是这样的: 加载数据层 加载网络消息层 加载逻辑层 调用World的OnCreate() 创建战斗UI对象 创建Hero的逻辑和渲染对象 Hero渲染对象在创建后向战斗UI申请血条对象 因而,我就把Hero的逻辑和渲染创建放到战斗UI对象之后,如下图 这样,就没有问题了。 从这个问题中,我们应该学会的是,在做新需求的时候,可以先思考新需求与现有功能之间的依赖关系,先把这种依赖关系理清楚,特别是之后如果做异步资源加载的话,不理清楚的话,很容易就乱了。 已完结,文章撰写中