游戏地址


玩法说明

- WASD 控制角色移动
- 按下J键 进入攻击模式(WASD 可以继续移动)

更新内容

- 完成角色锁定目标后边移动边攻击

开发心得


状态机的设计

最初的设计很乱, 每个状态的切入切出都是靠一个Boolean值控制的, 比如 isRun,isAttack,isSkillAttack 等等.
当由A状态切换到B状态时候, 需要将除了控制A状态的Boolean都设置为False,仅将A状态设置为True.

参考了一些视频教程,发现用一个int值做这种互斥的设计会非常好,并且可以灵活的运用 Entry 和 Exit State. 将状态机设计的更清晰
同时 使用Sub-State 将Idel和Run放在下一层, 整体更加整洁.
并且对于后期增加或减少新的状态 很方便. 总之好处多多吧. 

 
 

脚部动画制作

脚部动画使用的是2D的BlendTree, 用两个参数(垂直和水平) 去控制腿部使用哪个动画
当角色正好向前看时候, 可以直接将input的Vertical和Horizontal 值作为BlendTree的参数传入即可
但是当角色需要面向方块时候, Input传入的值是世界坐标(黄色箭头), 需要把这个值转换到角色的局部坐标系下(红色坐标).从而算出 水平和垂直方向的 分量来.
 

将问题数学化,且改变为一个方便计算的样式

o点为角色所在位置,红色圆圈为单位圆.
角色朝向方块,与单位圆相交的一点为A,
玩家只是右移键,所以世界坐标系下移动方向和单位圆相交一点为B
向量A'O 为 移动方向在 角色局部坐标系下 Z轴方向投影,
向量BA' 为 移动方向在 角色局部坐标系下 X轴方向投影,

对于向量A'O的 求解 可以简化为 : 求某向量A 在向量B上的投影, 具体的数学公式 可参照 这个帖子
而一旦求解出A'O 以后 对于BA'的求解 就变得简单了 BA' = BO-A'O  (向量的加减法)

因为已经是单位向量了, 所以直接将结果作为BlendTree的参数 传入即可.

 



Infinite V2 Release Note的更多相关文章

  1. Infinite V1 Release Note

      游戏地址 PLAY 玩法说明 WASD 控制角色移动 更新内容 - 初步完成了角色移动(攻击状态) 开发心得 独立做游戏 其实最耽误时间的就是在自己的短板上, 对于我来说 就是3D建模和动作制作. ...

  2. Paddle Release Note

    Paddle Release Note 重要更新 飞桨paddle框架2.0.0版本有如下重要更新: 编程范式:默认开启动态图模式进行模型开发和训练,通过动转静的方式进行模型部署和训练加速.如果需要使 ...

  3. glibc 2.x release note

    glibc 2.x release note,参见: https://sourceware.org/glibc/wiki/Glibc%20Timeline https://www.gnu.org/so ...

  4. RocketMQ Release Note(RocketMQ升级日志译文)

    RocketMQ升级日志 1 4.2.0 原版Release Note 1.1 New Feature 支持传输层安全性 客户端支持log4j2 PushConsumer支持条数与大小维度的流控 1. ...

  5. chromedriver release note

    ----------ChromeDriver v2.25 (2016-10-25)---------- Supports Chrome v53-55 Resolved issue 1547: Chro ...

  6. cocos2dx release note

    [传送门] 发布说明: https://github.com/fusijie/Cocos2dx-ReleaseNote-zh/blob/master/SUMMARY.md 更新记录: https:// ...

  7. 【转载】MySQL5.6.27 Release Note解读(innodb及复制模块)

    新功能   问题描述(Bug #18871046, Bug #72811): 主要为了解决一个比较“古老”的MySQL在NUMA架构下的“swap insanity”问题,其表现为尽管为InnoDB ...

  8. Django 2.0 Release note阅读简记

    最前面就是大家都知道的这个版本开始只支持py3.4+,而且下一个大版本就不支持3.4,再就是建议所有插件开始放弃1.11 1.最惊艳的变化,就是URL配置正则表达式的简化,旧的: url(r'^art ...

  9. Django 1.11 release note简明解读

    1.首先1.11这个版本是一个LTS版本 2.第一个支持python3.6的版本,最后一个支持python2.*的版本 3.Deprecating warnings 默认不再显示,同时建议第三方包开始 ...

随机推荐

  1. 朋友圈常见单页面触屏滑动上下翻屏功能jQuery实现

    翻页插件:实现原理,用margin-top来控制页面容器位置来实现上下翻页.margin这属性很好用,可以用来制作侧栏动画滑出菜单(左菜单,右内容,控制两者的margin实现):或者head下滑菜单 ...

  2. 【Cocos2d-x游戏开发】Cocos2d-x中的数据存储技术

    一.引言 数据存储和网络功能可以说是一款游戏中必不可少的功能,如果一款游戏不能保存进度那么它的可玩性必然大打折扣(试想一下,玩家辛辛苦苦玩了一整天的游戏,结果退出时告诉人家不能保存关卡信息,你明天还得 ...

  3. [转载]Grunt插件之LiveReload 实现页面自动刷新,所见即所得编辑

    配置文件下载  http://vdisk.weibo.com/s/DOlfks4wpIj LiveReload安装前的准备工作: 安装Node.js和Grunt,如果第一次接触,可以参考:Window ...

  4. 李洪强iOS经典面试题142-第三方框架及其管理

    李洪强iOS经典面试题142-第三方框架及其管理   第三方框架及其管理 使用过CocoaPods吗?它是什么?CocoaPods的原理? CocoaPod是一个第三方库的管理工具,用来管理项目中的第 ...

  5. Lua数据持久化

      1.数据文件 我们可以利用Lua中的table构造式来定义一种文件格式,即文件中的数据是table构造并初始化的代码 ,这种方式对于Lua程序而言是非常方便和清晰的,如: Entry{" ...

  6. HTML5的全新语义化元素

    1.<section> <section>元素用来定义文档或应用程序中的区域(或节).例如,可以用它组织你的个人信息,一个<section>用于联系信息,另一个用于 ...

  7. 项目:学生查看自己的作业情况和分数(php)

    <?php include '../includes/db.ini.php'; try { $sql='SELECT work_id,title,work_text,score_value FR ...

  8. IE浏览器测试

    http://www.iefans.net/ http://ie8.00791.com/ https://www.browserstack.com/http://browserhacks.com/

  9. ZooKeeper 配置

    # The number of milliseconds of each ticktickTime=2000 # The number of ticks that the initial# synch ...

  10. Python 中的枚举类型~转

    Python 中的枚举类型 摘要: 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期.月份.状态等. 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表 ...