早上大概地读了游戏引擎架构第三章剩下部分和第四章,第四章主要讲一些基础的数学运算,包括向量的基础知识,点积和叉积,然后是变换矩阵,这里用的是行向量形式,计算要将矩阵右乘,再然后是四元数,之后还有部分内容。

       下午写 cocos 人物移动的脚本,放弃了 cocos creator 本身的物理碰撞功能,改用不带物理效果的碰撞检测来编写。主要碰到的问题有碰撞方向的确定、多碰撞退出时状态改变、地形角点的碰撞处理和拼接碰撞体缝隙碰撞问题。 1、碰撞方向的确定        本来是想通过比较上帧和这帧两个物体在两个方向上的投影是否保持重叠来判断碰撞方向的,但是 cocos 碰撞帧的上一帧里面两个物体就已经重叠了,这个方法就没法做了,只好改为判断速度和位置来判断碰撞方向。 2、多碰撞退出状态改变        多个拼接实体同方向碰撞的情形下人物退出碰撞时碰撞状态改变问题。我这里主要是维护了一个碰撞物体列表,对 x 轴方向的碰撞维护一个表,y 轴方向的碰撞维护一个表。进入碰撞时把接触到的碰撞物体放入表中,退出时则删除。当最后一个碰撞体退出时,人物的 collisionX 状态就置 0,y 轴同理。 3、地形角点的碰撞处理        这个是脚本处理碰撞时调整人物位置的时候引发的,当在碰到角点的时候同时按下 y 轴上和 x 轴上的方向键时会出现人物瞬间移动到某个边上。主要解决方法是加碰撞锁,当某个轴产生碰撞时,另一个轴就不能产生碰撞,这个方法可以针对 box 碰撞体进行处理,但是针对多边形时可能就不好用了。 4、拼接碰撞体缝隙碰撞的问题        这个可能得用拼接好的 sprite 挂载碰撞组件来计算多边形碰撞体顶点来解决,目前改脚本暂时没找到解决方案。

       人物可以二段跳。(忽略美工呗,我的画画水平并不高哈哈)

图片说明