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) 收藏 举报 分类: 微信开发 ...
随机推荐
- 站在OC的基础上快速理解Swift的类与结构体
阅读此文章前,您已经有一定的Object-C语法基础了!) 2014年,Apple推出了Swift,最近开始应用到实际的项目中. 首先我发现在编写Swift代码的时候,经常会遇到Xcode不能提示,卡 ...
- linux df和du统计的空间不一致
假设你发现是 /tmp/ 目录不对劲,那么就这样就可以查看: lsof | grep /tmp 输出的结果中,注意某些含有“(deleted)”字样的记录,它们中的一部分就是罪魁祸首,将它们kill ...
- centos 安装 redis3.2.0 集群
这里创建6个redis节点,其中三个为主节点,三个为从节点. redis和端口对应关系: 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 从: 127.0.0 ...
- 与众不同 windows phone (26) - Contacts and Calendar(联系人和日历)
原文:与众不同 windows phone (26) - Contacts and Calendar(联系人和日历) [索引页][源码下载] 与众不同 windows phone (26) - Con ...
- Codeforces 475D CGCDSSQ 求序列中连续数字的GCD=K的对数
题目链接:点击打开链接 #include <cstdio> #include <cstring> #include <algorithm> #include < ...
- 在 Ubuntu 12.04 上通过安装源安装 Open vSwitch (OVS)
先把Ubuntu 12.04更新一下 sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade 删除 Ebtables包 s ...
- [Android]mac下开发环境搭建
好像没神马好些的? 1.下载adt-bundle-mac-x86_64bit(http://developer.android.com/sdk/installing/bundle.html) 2.解压 ...
- chrome查看headers
F12-> network标签, 刷新网页-> 找到该网页url,选择headers
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- 怎样在Android本地视频播放器开发
在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...