cocos2d-x地图的应用最典型的例子就是塔防类游戏,下面我们就来简单学习一下地图的应用吧!
创新互联公司是一家专业提供万荣企业网站建设,专注与网站建设、做网站、H5建站、小程序制作等业务。10年已为万荣众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。我们应用的地图编辑软件是Tiled,一款免费的软件,首先是文件->新文件,然后地图->新图块导入图片资源,然后就可以在地图上绘制。
Tiled有四种方式可以编辑瓷砖地图,菜单位于软件界面的右上角。
Stamp Brush(快捷键 B),可以把当前从瓷砖集中选择的瓷砖画在地图上;
Bucket Fill(快捷键 F),可以填充空白区域或者由相同瓷砖连接起来的区 域;
Eraser(快捷键 E),用于擦掉瓷砖;
Rectangular Select(快捷键 R), 你可以选择一个区域,然后用Ctrl+c或者菜单项Edit > Copy来复制选中的区域, 接着Ctrl+v或者菜单项Edit > Paste粘贴到当前鼠标在地图上所处的位置 – 在实际使用中你会看到,其实在粘贴时,软件是自动却换到了Stamp Brush模式 进行粘贴的。还有个小技巧,如果想清除当前的瓷砖选择,只要鼠标右键点击一下就可以了。
一个图层上面不得使用两个图片上的资源,不然后面调用的代码编译会报错;
其次就是将图片资源和生成的tmx文件要保持在同级路径下,不然后面代码也会报错,当然也可以修改tmx下的图片资源路径来解决问题。
1.点击屏幕获取坐标点
bool HelloWorld::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent) { CCPoint point = this->tilePosFromLocation(pTouch->getLocation(), (CCTMXTiledMap *)this->getChildByTag(1)); CCLog("%f,%f",point.x,point.y); return true; } CCPoint HelloWorld:: tilePosFromLocation(CCPoint location,CCTMXTiledMap *tileMap) { //pos是地图上的坐标,当前屏幕的坐标+地图的偏移量 CCPoint pos = ccpSub(location, tileMap->getPosition()); pos.x = (int)(pos.x / tileMap->getTileSize().width); //(地图总块数*每块的像素 - 现在的y坐标)/ 每块的像素 //getMapSize().height是地图高度的瓷砖数 pos.y = (int)(((tileMap->getMapSize().height * tileMap->getTileSize().height - pos.y)) / tileMap->getTileSize().height); CCLog("%f,%f",pos.x,pos.y); return pos; }
//获取瓷砖的属性 CCPoint playerindex = ccp(a,b); //根据坐标点获取GID int tiledid = layer->tileGIDAt(playerindex); if (tiledid > 0) { //根据GID获取指定瓷砖块的属性 CCDictionary *tiledic = (CCDictionary *)tileMap->propertiesForGID(tiledid); //判断瓷砖块是否有属性,如果有就用它的属性,如果没有 if (tiledic) { CCString * value = (CCString *)tiledic->objectForKey("isTree"); int va = value->intValue(); if (va == 1) { CCLog("这是一棵树"); } } else { CCLog("该瓷砖快没有属性"); } }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。