一、实验目的与要求
- 熟悉cocos2d-x开发环境。
- 了解cocos2d-x中二维游戏场景绘制方法。
- 掌握瓦片地图编辑器使用方法。
二、实验内容与方法
-
完成基本实验 (60分)
按照“英雄快跑实验指导”文件指引,成功运行本次实验游戏。 -
完成游戏通关 (5分)
凭自身实力或修改游戏代码的方式通关,成功出现“Success”结束画面。 -
修改游戏显示名称 (5分)
通过修改游戏代码,使自己的学号姓名替换原“MyGame”字样出现在标题栏左上角。 -
完成Bug修改 (10分)
通过修改游戏代码的方式修复代码BUG,如:游戏结束响应Bug、树枝检测Bug等。 -
扩充游戏地图 (10分)
在原有地图基础上,用瓦片地图编辑器(Tiled Map Editor)扩充地图宽度为2倍(高度不变),并自行设计新的右半边地图(建议风格与左半边地图保持一致)。 -
完成扩充地图通关 (10分)
检查并优化代码,录制游戏通关视频(含扩充地图),上传至BB系统。
三、实验步骤与过程
1. 完成基本实验 (60分)
按照“英雄快跑实验指导”文件指引,成功运行本次实验游戏。
(1) 生成项目文件
cocos new MyGame –p com.2019092121.edu –l cpp –d I:\SZU\cocos2dx_Project
(2)替换项目内的源代码以及图片资料等
(3) 添加、删除现有项(类)
(4) 更改代码
在AppDelegate.h修改对应代码
(5) 调整窗口大小
(6) 运行程序
2. 完成游戏通关 (5分)
凭自身实力或修改游戏代码的方式通关,成功出现“Success”结束画面。
3. 修改游戏显示名称 (5分)
通过修改游戏代码,使自己的学号姓名替换原“MyGame”字样出现在标题栏左上角。
(1) 修改AppDelegate.cpp中代码
4. 完成Bug修改 (10分)
通过修改游戏代码的方式修复代码BUG,如:游戏结束响应Bug、树枝检测Bug等。
(1) 树枝检测Bug
原游戏: 在经过长树枝时会掉落,并不会留在树枝上通过。
修改bug方法:
首先打开tiled map editor,,将光标移到目标像素,查询左下角得到树枝的tiledID值为149和133。(项目中从1计数,所以需要+1)
第一处修改:
添加(playerTiledID != 149) && (playerTiledID != 133)
效果是不跳动时遇到树枝不会自动下落,即可以在树枝上走动。
第二处修改:
添加tiledID == 149 || tiledID == 133
效果是下落时遇到树枝,不在下落。
具体效果见最终游戏视频。
(2) 游戏结束响应Bug
原游戏:在game over之后地图仍然会更新向前滚动,会导致游戏结束响应Bug。
修改方法:
当game over之后,画面不再更新。
5. 扩充游戏地图 (10分)
在原有地图基础上,用瓦片地图编辑器(Tiled Map Editor)扩充地图宽度为2倍(高度不变),并自行设计新的右半边地图(建议风格与左半边地图保持一致)。
打开Tiled Map Editor,地图——调整地图大小,修改为128*64,将地图长度扩展为两倍。
其中可站立的像素id为8、7、151、170、171、172、149、133。
需要与代码保持一致。
最终效果见通关视频
6.完成扩充地图通关 (10分)
检查并优化代码,录制游戏通关视频(含扩充地图),上传至BB系统。
- 添加获胜/失败音效
在config.h中添加音效文件路径
添加头文件
在失败/胜利后播放音效
playEffect()中参数需要时char*,需要将string进行转换 - 修改不合理设计
原游戏中,当玩家前方是土块时,仍然会掉落,这明显不符合实际,理应被挡住。
所以在此处修改为会被土块,木条等物品挡住前进。
修改方案:
首先获取精灵面前的tiledID
X:(int)(player_map_x / map->getTileSize().width)
Y:(int)(map->getMapSize().height - 2 - player_map_y / map->getTileSize().height))
利用map->getLayer(MAP_BG_LAYER_NAME)->getTileGIDAt()获取ID
然后判断该ID是否是土块等物品之一,如果是,则返回,不会更新地图移动,让小人原地跑步,直到下一次跳跃。
注意:需要首先判断精灵是否位于地图中,否则会在失败时报错。
最终效果见通关视频。