制作tmx地图可以使用tiled工具。
//载入地图
map = CCTMXTiledMap::create("Map.tmx");
this->addChild(map);
//this->setPaths(CCPointArray::create(10));
paths = CCPointArray::create(20);//paths用于保存对象层所有的点
paths->retain(); //引用计数加一
//获取对象层
CCTMXObjectGroup * group = map->objectGroupNamed("Path");
int i = 1;
while(true)
{
//获取对象层中的点
CCString * objectName = CCString::createWithFormat("Point%d",i);
CCDictionary * objectInfo = group->objectNamed(objectName->getCString());
if (objectInfo == NULL) {
break;
}
//获取点的属性
CCPoint po = CCPoint(objectInfo->valueForKey("x")->floatValue(),objectInfo->valueForKey("y")->floatValue());
paths->addControlPoint(po);<span style="white-space:pre"> //添加对象层中的点
i++;
}
CCSprite * boss = CCSprite::create("Icon-Small.png");
//将精灵的初始位置设置到在对象层获取到的点上(点是自己在tield工具上新建对象层设定的)
boss->setPosition(paths->getControlPointAtIndex(0));//设置精灵在第一个点
this->addChild(boss);
CCCardinalSplineTo * move = CCCardinalSplineTo::create(5, paths, 1);//设置路径的动作
boss->runAction(move);//执行动作
点击tmx地图上的点
CCTMXLayer * roleLayer = map1->layerNamed("Role");
//注意这不是opengl坐标
CCPoint ccpo = pTouch->getLocationInView()/32;
//输出测试
CCPoint c1 = pTouch->getLocation();
CCPoint c2 = pTouch->getLocationInView();
CCLog("%f, %f, %f, %f", c1.x, c1.y, c2.x, c2.y);
ccpo = CCPoint((int)ccpo.x, (int)ccpo.y);
//获取层中的精灵
//CCSprite * title = roleLayer->tileAt(ccpo);
//title->runAction(CCFadeOut::create(1)); //点击的渐变消失
//GID png中的第几个小图片,1开始
if (roleLayer->tileGIDAt(ccpo) == 52)
roleLayer->setTileGID(59, ccpo); //3,第几个小图片