一、实验目的与要求
1.了解二维游戏动画合成原理。
2.熟悉Cocos2d-x中的用户交互、触摸事件、碰撞检测机制。
3.熟悉CocoStudio动画编辑器的使用,了解骨骼动画。
二、实验内容与方法
1.完成游戏编译(10分)
成功编译并运行教材P128“游戏动画实例-侠客行”。
2.增加计分板功能和回合制 (10分)
记录成功/失败次数,增加计分板功能;将游戏改为回合制游戏。
3.增加英雄Defend动作 (15分)
利用CocoStudio设计英雄Defend动作,并将此功能在游戏中加载。
4.修改游戏bug(15分)
修改游戏中出现的明显bug。
5. 游戏优化升级(10分)
自行发挥想象力,优化游戏功能。
6.完成实验报告 (40分)
截图记录关键步骤,分析实验结果,撰写心得体会。
三、实验步骤与过程
1.完成游戏编译(10分)
成功编译并运行教材P128“游戏动画实例-侠客行”。
(1)在class文件下添加源代码
(2)在resource文件下添加资源文件
(3)编译运行代码
2.增加计分板功能和回合制 (10分)
记录成功/失败次数,增加计分板功能;将游戏改为回合制游戏。
(1)在AnimationScene.h中添加参数
(2)在AnimationScene.cpp中添加全局变量
(3)添加记分板,记录双方胜场数和当前回合数
(4)判断每回合的胜方并修改记分板
(5)修改游戏为回合制,获胜方式为——三局两胜制
(6)运行程序如下图所示
3.增加英雄Defend动作 (15分)
利用CocoStudio设计英雄Defend动作,并将此功能在游戏中加载。
(1)设计defend动作
(2)导出项目并放入resource文件
(3)在config_set.h中添加DEFEND状态
(4)添加防御按钮
(5)绑定点击事件
(6)在Hero.h中添加防守状态
(7)设置防守时扣血效果
(8)添加防守状态的动画更新
(9)运行效果如下
4.修改游戏bug(15分)
修改游戏中出现的明显bug。
【1】点击攻击按钮时,玩家和敌人会同时攻击
解决:在攻击按钮响应中删去敌人攻击部分
【2】玩家被攻击到后,会无法进行操作。
解决:删除Hero.cpp中对受伤判断的判定
【3】当玩家被攻击到时,并没有播放受到攻击的动画
解决:在Hero.cpp中添加播放受击动画
【4】敌人总是往左走,并停在左边边界
解决:在AIManger.cpp中调整两方向概率相等
【5】玩家和敌人攻击后的碰撞检测存在问题
解决:更改MyContactListener.cpp中的矩阵大小
【6】有时候一次攻击会造成非常多次伤害
观察:查看MyContactListener.cpp中的攻击受创部分,以玩家攻击敌人为例。
分析:这两个部分的原意是在进行一次攻击后将攻击状态设为flase避免重复扣血。然而,因为此时其状态state仍为ATTACK,所以update函数会又将攻击状态改为true。故而会出现重复扣血。
解决:先修改state为STAND后再修改攻击状态。
5. 游戏优化升级(10分)
自行发挥想象力,优化游戏功能。
【1】玩家的攻击状态会被攻击按钮打断重置
解决:增加是否正在攻击判断,若正在攻击,则不响应攻击按钮
【2】对动画播放结束的判定存在问题
解决:在动画的最后一帧添加帧事件
【3】背景云动画衔接不连贯
解决:转为静态图
四、实验结论或心得体会
本次实验的游戏存在大量bug且文件数量众多,存在一定难度。通过此次实验,我学会了运用cocostudio动画编辑器进行动画编辑,以及通过运行游戏来找出bug不断修改,逐渐优化游戏。
(by 归忆)