Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_1
以下是一些设计略显繁琐,有必要清除思维。
下一个主要的成就,当我们点击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的更多相关文章
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3
点击下载代码 http://download.csdn.net/detail/lideguo1979/8291803 新建一个类RouteNavigation,定义getPath()方法.用来获取 ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_2
在编写获取路径方法前,我们先把角色须要的动画文件载入进来,角色的文件为png 和 plist格式. player1_anim.png.plist player1_anim.pn ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第八部分 角色的散步路径
获得所述路径之后.我们将能够使根据的步行路径的作用,当您点击gobutton什么时候.我们呼吁player的startGo()办法.传入的参数是保存路径2一维数组 void GameBaseScene ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView
于MenuScene.cpp 点击单机游戏后会调用 Director::getInstance()->pushScene(MapChooseScene::createScene()); 进入到关 ...
- 微信小程序开发(七)获取手机网络类型
// succ.wxml <view>手机网络状态:{{netWorkType}}</view> // succ.js var app = getApp() Page({ da ...
- C#微信公众号开发 -- (七)自定义菜单事件之VIEW及网页(OAuth2.0)授权
通俗来讲VIEW其实就是我们在C#中常用的a标签,可以直接在自定义菜单URL的属性里面写上需要跳转的链接,也即为单纯的跳转. 但更多的情况下,我们是想通过VIEW来进入指定的页面并进行操作. 举一个简 ...
- 云平台编程与开发(七)-使用X5Cloud云平台开发网络彩讯
云平台编程与开发(七)-使用X5Cloud云平台开发网络彩讯 博客分类: 云平台 云计算 Java Android Android 云平台 Java 网络彩讯定义以及工作大概流程 下载试用地址:ap ...
- C#的百度地图开发(三)依据坐标获取位置、商圈及周边信息
原文:C#的百度地图开发(三)依据坐标获取位置.商圈及周边信息 我们得到了百度坐标,现在依据这一坐标来获取相应的信息.下面是相应的代码 public class BaiduMap { /// < ...
- 转:微信开发之使用java获取签名signature(贴源码,附工程)
微信开发之使用java获取签名signature(贴源码,附工程) 标签: 微信signature获取签名 2015-12-29 22:15 6954人阅读 评论(3) 收藏 举报 分类: 微信开发 ...
随机推荐
- 8086 CPU 寻址方式
8086 CPU 寻址方式灵活.有以下几种 idata 表示常量 1. [ idata ] 用一个常量来表示地址,可用于直接定位内存单元,但是在 MASM中要显实在的说明 ds 段寄存器, 比如 ...
- OpenCV在矩阵上的卷积
转载请注明出处!!!http://blog.csdn.net/zhonghuan1992 OpenCV在矩阵上的卷积 在openCV官网上说是戴面具,事实上就是又一次计算一下矩阵中的每个value,那 ...
- VMware Workstation(虚拟机软件) V10.0 简体中文版可以安装了
在虚拟机软件中VMware Workstation算是一款非常强大较稳定的软件了,今天 VMware Workstation 10.0正式发布了,最让人欣喜的是该版本终于有了简体中 文版了,从现在开始 ...
- Codeforces Round #350 (Div. 2)解题报告
codeforces 670A. Holidays 题目链接: http://codeforces.com/contest/670/problem/A 题意: A. Holidays On the p ...
- java基础---->摘要算法的介绍 (转)
数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(Hash)算法. ...
- sort 使用 tab键 作为 分隔符_人生如梦_百度空间
sort 使用 tab键 作为 分隔符_人生如梦_百度空间 sort 使用 tab键 作为 分隔符 For some reason "\t" doesn't work right, ...
- Android周报
Android周报 原文 http://www.race604.com/android-weekly-25/ 文章/教程 使用 Kotlin 开发 Android 应用系列 看起来用 Kotli ...
- QT4和QT3的区别
著名的QT库前一阵子升级到4.xx版本了,我目前在开发的一个基于QT3的软件,由于受到QThread的各种困扰,因此打算尝试将代码升级到QT4, 但是当我实际开始升级工作后,才发现QT3和QT4的变化 ...
- Nginx 进程间通信
Linux下的IPC非常多,nginx的进程都是有亲缘关系的进程,对于他们的通信我们选择TCP socket进行通信. TCP socket 用来做进程通信的优点有, 1.socket是文件描 ...
- PSD 学位涵义 Poor, Smart and Deep desire to become rich 的缩写,不是真正的学位认证,是对一种心理状态的形容,所谓PSD学位是形容那些贫穷,但是很聪明,很深…_●.×
PSD 学位涵义 Poor, Smart and Deep desire to become rich 的缩写,不是真正的学位认证,是对一种心理状态的形容,所谓PSD学位是形容那些贫穷,但是很聪明,很 ...