学习1 二维游戏场景绘制(英雄快跑)

参考资料:

《计算机游戏程序设计》(基础篇)(第3版)

 

说明:

<学习>系列所有的源代码均由《计算机游戏程序设计》提供。本人会在这些代码中融入自己的想法,对其进行迭代优化,旨在个人学习。

 

实现效果:

 

学习目标:

1.熟悉cocos2d-x开发环境。

2.了解cocos2d-x中二维游戏场景绘制方法。

3.掌握地图编辑器使用方法。

修改内容

1.完成Bug修改

修复树枝检测Bug。

 

步骤与过程

1. 完成Bug修改

试图修复树枝无法站立的bug。

首先我们找到判断角色站立在图块上的相关代码。在MapScene.cpp文件的void MapScene::update(float t)函数中,有这么一段代码:

// 不跳动时遇到非地面图块自动下落

if((int)(player_map_y / map->getTileSize().width) >= 0 && player_screen_x < sizeWidthTemp)

{

int playerTiledID = map->getLayer(MAP_BG_LAYER_NAME)->

getTileGIDAt(Vec2((int)(player_map_x/map->getTileSize().width),

(int)(map->getMapSize().height-1-player_map_y/map->getTileSize().height)));

if ((m_isJump == false)&&(m_jumpDir == Dir::STOP)&& (playerTiledID != 8)

&& (playerTiledID != 7) && (playerTiledID != 151) && (playerTiledID != 170)

 && (playerTiledID != 171) && (playerTiledID != 172)) {

m_isJump = true;

m_jumpDir = Dir::DOWN;

m_jumpSpeed = 2;

}

}

 

明显的,这段代码是用来判断角色“不跳动时遇到非地面图块自动下落”。而其中有一段加粗了的if判断语句则是判断目前角色是否站立在地面图块上,只有非地面图块才能执行后面的代码段更改角色的状态为下落状态。

而playerTiledID则明显是指图块的id了,因此,只要找到树枝图块对应的id号,把它作为判断条件加入到该加粗了的if判断语句中即可修复“树枝无法站立”的bug了。

值得注意的是,代码中playerTiledID变量的id是从1开始的,0代表空;而地图块中的id是从0开始的。因此两者id号相差1 (即playerTiledID - 1 才是地图块真正id号)。

 

用Tiled软件打开该游戏的地图素材图,寻找“树枝”块的id。如下图:

 

 

可见“树枝”图块的id为132和148 。因此,对应的playTiledID为133和149。

修改上文中加粗的if判断语句为:

if ((m_isJump == false)&&(m_jumpDir == Dir::STOP)&& (playerTiledID != 8) &&

(playerTiledID != 7) && (playerTiledID != 151) && (playerTiledID != 170)&&

(playerTiledID != 171) && (playerTiledID != 172) && (playerTiledID != 133) && (playerTiledID != 149))

 

    ② 在MapScene.cpp文件的void MapScene::update(float t)函数中,还有为“处理玩家跳跃”时的这么一段代码:

// 获取玩家脚下的地图块的编号

if (player_map_y/map->getTileSize().width >= 0 && player_screen_x < sizeWidthTemp) {

int tiledID = map->getLayer(MAP_BG_LAYER_NAME)->

getTileGIDAt(Vec2((int)(player_map_x/map->getTileSize().width),

(int)(map->getMapSize().height - 1 - player_map_y/map->

getTileSize().height)));

    if (tiledID == 8 || tiledID == 7 || tiledID == 151 || tiledID == 170 || tiledID == 171

|| tiledID == 172) {

check = true;

player->setPositionY((int)(player_screen_y + player->

getContentSize().height/2 - 6));

m_jumpSpeed = PLAYER_JUMP_SPEED;

m_jumpDir = Dir::STOP;

m_isJump = false;

break;

}

}

    在这段代码中,tiledID就类似于前文提到的playerTiledID变量一样。因此同理,在加粗的if语句段中加入“树枝”的id作为判断条件即可,更改为:

if (tiledID == 8 || tiledID == 7 || tiledID == 151 || tiledID == 170 || tiledID == 171

|| tiledID == 172 || tiledID == 133 || tiledID == 149)

 

至此,“树枝”bug修改完成。如下图所示,修改完该bug后,角色可以站在树枝上了:

 

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值