【计算机游戏开发】二维游戏场景绘制

Alex_Shen
2021-08-10 / 0 评论 / 0 点赞 / 89 阅读 / 1,815 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

github项目地址

一、实验目的与要求

  1. 熟悉cocos2d-x开发环境。
  2. 了解cocos2d-x中二维游戏场景绘制方法。
  3. 掌握瓦片地图编辑器使用方法。

二、实验内容与方法

  1. 完成基本实验 (60分)
    按照“英雄快跑实验指导”文件指引,成功运行本次实验游戏。

  2. 完成游戏通关 (5分)
    凭自身实力或修改游戏代码的方式通关,成功出现“Success”结束画面。

  3. 修改游戏显示名称 (5分)
    通过修改游戏代码,使自己的学号姓名替换原“MyGame”字样出现在标题栏左上角。

  4. 完成Bug修改 (10分)
    通过修改游戏代码的方式修复代码BUG,如:游戏结束响应Bug、树枝检测Bug等。

  5. 扩充游戏地图 (10分)
    在原有地图基础上,用瓦片地图编辑器(Tiled Map Editor)扩充地图宽度为2倍(高度不变),并自行设计新的右半边地图(建议风格与左半边地图保持一致)。

  6. 完成扩充地图通关 (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系统。

  1. 添加获胜/失败音效
    在config.h中添加音效文件路径
    在这里插入图片描述
    添加头文件
    在这里插入图片描述
    在失败/胜利后播放音效
    在这里插入图片描述
    在这里插入图片描述
    playEffect()中参数需要时char*,需要将string进行转换
  2. 修改不合理设计
    原游戏中,当玩家前方是土块时,仍然会掉落,这明显不符合实际,理应被挡住。
    所以在此处修改为会被土块,木条等物品挡住前进。
    修改方案:
    首先获取精灵面前的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是否是土块等物品之一,如果是,则返回,不会更新地图移动,让小人原地跑步,直到下一次跳跃。
在这里插入图片描述
注意:需要首先判断精灵是否位于地图中,否则会在失败时报错。

最终效果见通关视频。

0

评论区