>데이터 베이스 >MySQL 튜토리얼 >Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-06-07 15:12:271241검색

下面的设计稍微繁琐一些,有必要把思路说清楚。 下一步的主要实现当我们点击Go按钮后,得到骰子随机数,就是行走的步数,根据步数获取行走的路径,然后角色根据路径移动位置。大体流程如图所示: 这其中getPath()获取路径的方法有必要说清楚,还是看流程图

下面的设计稍微繁琐一些,有必要把思路说清楚。

下一步的主要实现当我们点击Go按钮后,得到骰子随机数,就是行走的步数,根据步数获取行走的路径,然后角色根据路径移动位置。大体流程如图所示:


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

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


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


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


我们开始修改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 按钮
};


修改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 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");
}


//这个就是简单 的添加Go按钮
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 canpassgrid bool for row="0;row<tiledRowsCount;row++)" col="0;col<tiledColsCount;col++)" false log><br>
<br>

<p>Ok 至此我们已经可以调试一下代码,从log中可以看到已经打印出了canPassGrid数组中可以通过的行列值了</p>
<p>对比一下sea.tmx文件中的way图层 ,看看行列值是不是一致了</p>
<img  src="/static/imghwm/default1.png" data-src="/inc/test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20141219023643545%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlkZWd1bzE5Nzk%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Flideguo1979%2Farticle%2Fdetails%2F42020359" class="lazy" alt="Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径" ><br>
<p><br>
</p>
<p>点击下载代码<br>
</p>
<p>http://download.csdn.net/detail/lideguo1979/8276135<br>
</p>
<p><br>
</p>
<p>获取路径稍微复杂一些,我们分多章介绍</p>
<p><br>
</p>
<p>未完待续</p>


</tiledrowscount>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.