以下是一些设计略显繁琐,有必要清除思维。

下一个主要的成就,当我们点击Gobutton后,得到一个随机数骰子,是走了几步,它是基于以下步骤行走路径的数目,然后移动位置的基于角色的路径。

流程如图普遍认为:

这当中getPath()获取路径的方法有必要说清楚,还是看流程图吧

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlkZWd1bzE5Nzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

思路大体是这种,代码实现上可能存在一些区别。可是不影响我们的总体设计思想。

我们開始改动GameBaseScene代码

GameBaseScene.h
//新加入变量 表示地图块中每块的宽高
const int tiledWidth = 32;
const int tiledHeight = 32; class GameBaseScene: public Layer
{
public:
int tiledColsCount; //关卡地图总的列数
int tiledRowsCount;//关卡地图总的行数 bool** canPassGrid;//依据地图总的行列数创建的二维数组 virtual void initTiledGrid();//用来初始化canPassGrid数组
void setWayPassToGrid();//依据地图图层way,设置canPassGrid对应的值为true
void onExit();//退出时须要释放某些变量空间 void addGoButton();//加入GO button
};

改动GameBaseScene.cpp文件

在init方法中加入新增函数的调用
bool GameBaseScene::init()
{
…………………..
addGoButton();
initTiledGrid();
setWayPassToGrid();
…………….
}
void GameBaseScene::setWayPassToGrid()
{
TMXLayer* wayLayer = _map->layerNamed("way");//获取地图way图层 Size _mapSize = wayLayer->getLayerSize(); //获取way图层大小
//依据way图层。获取道路的坐标并转换成地图的行列值,设置canPassGrid对应的行列值为true,表示人物能够从这里通过
for (int j = 0; j < _mapSize.width; j++) {
for (int i = 0; i < _mapSize.height; i++) {
Sprite* _sp = wayLayer->tileAt(Point(j, i));
if (_sp)
{
float x = _sp->getPositionX();
float y = _sp->getPositionY();
int col = x/tiledWidth;
int row = y/tiledHeight;
canPassGrid[row][col] = true;
log("canPassGrid row= %d ,col =%d ,canpass = %d" ,row,col,canPassGrid[row][col]);
} }
}
log("setWayPassToGrid finished");
}

//这个就是简单 的加入Gobutton
void GameBaseScene::addGoButton()
{
Sprite* goButton = Sprite::create(GO_BUTTON);
goButton->setPosition(ccp(tableStartPosition_x+2*tableWidth,tableStartPosition_y-tableHeight*5));
addChild(goButton);
}
//当退出是调用该函数。释放canPassGrid占用的空间
void GameBaseScene::onExit()
{ CC_SAFE_DELETE(canPassGrid);
Layer::onExit(); }

以下看一下initTiledGrid()方法的实现。因为每一个关卡地图大小不一样,所以这种方法的实现放到了子类中

SeaScene.cpp实现例如以下

SeaScene实现父类GameBaseScene的initTiledGrid方法

void GameBaseScene::initTiledGrid()
{
tiledColsCount = 20;//地图总的列数
tiledRowsCount = 15;//地图总的行数 //依据行列数创建二维数组canPassGrid
canPassGrid = new bool*[tiledRowsCount];
for(int i=0;i<tiledRowsCount;i++)
canPassGrid[i]=new bool [tiledColsCount]; //给canPassGrid设置默认值为false 表示不能通过
for(int row = 0;row<tiledRowsCount;row++)
{
for(int col = 0;col<tiledColsCount;col++)
{
canPassGrid[row][col] = false;
}
}
log(""); }

Ok 至此我们已经能够调试一下代码,从log中能够看到已经打印出了canPassGrid数组中能够通过的行列值了

对照一下sea.tmx文件里的way图层 。看看行列值是不是一致了

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlkZWd1bzE5Nzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

点击下载代码

http://download.csdn.net/detail/lideguo1979/8276135

稍微更复杂的路径,我们分多章

待续

Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_1的更多相关文章

  1. Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3

    点击下载代码   http://download.csdn.net/detail/lideguo1979/8291803 新建一个类RouteNavigation,定义getPath()方法.用来获取 ...

  2. Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_2

    在编写获取路径方法前,我们先把角色须要的动画文件载入进来,角色的文件为png 和 plist格式. player1_anim.png.plist             player1_anim.pn ...

  3. Cocos2d-x 3.2 大富翁游戏项目开发-第八部分 角色的散步路径

    获得所述路径之后.我们将能够使根据的步行路径的作用,当您点击gobutton什么时候.我们呼吁player的startGo()办法.传入的参数是保存路径2一维数组 void GameBaseScene ...

  4. Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView

    于MenuScene.cpp 点击单机游戏后会调用 Director::getInstance()->pushScene(MapChooseScene::createScene()); 进入到关 ...

  5. 微信小程序开发(七)获取手机网络类型

    // succ.wxml <view>手机网络状态:{{netWorkType}}</view> // succ.js var app = getApp() Page({ da ...

  6. C#微信公众号开发 -- (七)自定义菜单事件之VIEW及网页(OAuth2.0)授权

    通俗来讲VIEW其实就是我们在C#中常用的a标签,可以直接在自定义菜单URL的属性里面写上需要跳转的链接,也即为单纯的跳转. 但更多的情况下,我们是想通过VIEW来进入指定的页面并进行操作. 举一个简 ...

  7. 云平台编程与开发(七)-使用X5Cloud云平台开发网络彩讯

    云平台编程与开发(七)-使用X5Cloud云平台开发网络彩讯 博客分类: 云平台 云计算 Java Android Android 云平台 Java 网络彩讯定义以及工作大概流程  下载试用地址:ap ...

  8. C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息

    原文:C#的百度地图开发(三)依据坐标获取位置.商圈及周边信息 我们得到了百度坐标,现在依据这一坐标来获取相应的信息.下面是相应的代码 public class BaiduMap { /// < ...

  9. 转:微信开发之使用java获取签名signature(贴源码,附工程)

    微信开发之使用java获取签名signature(贴源码,附工程) 标签: 微信signature获取签名 2015-12-29 22:15 6954人阅读 评论(3) 收藏 举报  分类: 微信开发 ...

随机推荐

  1. leetcode 最长连续序列 longest consecutive sequence

    转载请注明来自souldak,微博:@evagle 题目(来自leetcode): 给你一个n个数的乱序序列,O(N)找出其中最长的连续序列的长度. 例如给你[100, 4, 200, 1, 3, 2 ...

  2. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  3. STM32建立project库函数方法

    (1)打开keilMDK主界面能够看到project中有一个默认的project,点击这个project名字,然后选择菜单Project->Close Project,就关闭掉这个project ...

  4. c#soap调用WebService

    辅助类 /// <summary> /// 上传数据参数 /// </summary> public class UploadEventArgs : EventArgs { i ...

  5. Mac OS提示# 14:自己定义文件图标

    本教程的其余部分再一次错过了方法,和一些使用提示,做一些额外的,我们希望对大家有帮助.  自己定义图标      对于Mac OSX用户来说,Dashboard,Dock栏,壁纸以及各种键盘触摸板的快 ...

  6. cocos2d-x中使用JNI的调用JAVA方法

    用cocos2d-x公布Android项目时.都应该知道要用JAVA与C/C++进行交互时会涉及到JNI的操作(Java Native Interface).JNI是JAVA的一个通用接口.旨在本地化 ...

  7. [初探iOS开发]storyboard的使用

    storyboard的目的是为了方便的设计程序view之间的关系,使得程序员把精力都放到核心业务逻辑之上.

  8. SWT可视化设计

    SWT可视化设计,可以使用Google的WindowBuilder. 在Google Code中,搜索WindowBuilder就可以看到路径. 在Eclipse中   Help--->Inst ...

  9. windows mysql安装、配置

    一.MySQL的下载: 上图中,我们选择红框部分的社区版本进行下载,MySQL支持许多平台: 我的操作系统是64位的,选择对应版本MSI版下载,弹出login界面, 选择no thanks,just ...

  10. Windows 8.1下 MySQL绿色版安装配置与使用

    原文:Windows 8.1下 MySQL绿色版安装配置与使用 Mysql-5.6.17-winx64操作步骤: 一.安装MySQL数据库 1.下载. 下载地址:http://downloads.my ...