我正在遵循这个关于在我的游戏 http://www.raywenderlich.com/39113/cocos2d-x-tile-map-tutorial-part-1 中实现瓦片地图的惊人教程
http://www.raywenderlich.com/40544/cocos2d-x-tile-map-tutorial-part-2
但当我说到这一点时:
CCTMXObjectGroup *objectGroup = _tileMap->objectGroupNamed("Objects");
if(objectGroup == NULL){
CCLog("tile map has no objects object layer");
return false;
}
CCDictionary *spawnPoint = objectGroup->objectNamed("SpawnPoint");
int x = ((CCString)*spawnPoint->valueForKey("x")).intValue();
int y = ((CCString)*spawnPoint->valueForKey("y")).intValue();
_player = new CCSprite();
_player->initWithFile("Player.png");
_player->setPosition(ccp(x,y));
this->addChild(_player);
this->setViewPointCenter(_player->getPosition());
我收到一个错误:CCDictionary *spawnPoint = objectGroup-
说明没有转换此objectGroup的函数。(错误:不存在从Cocos2d::Valuemap到Cocos2d::CCdictionary的适当转换函数)
这看起来像一个问题,从差异cocos的版本使用(本教程是v2和我是v3)。
有人知道如何解决这个问题吗?
为什么不使用自动指针,并使用普通C语法访问返回的无序映射。代码示例见下文。
auto spawnPoints = objectGroupd->objectNamed("SpawnPoint");
int x = spawnPoints.at("x").asInt();
int y = spawnPoints.at("y").asInt();
这将为您提供与raywenderlich教程期望您拥有的相同值。
CCDictionary现在是ValueMap。因此,只需将其更改为ValueMap即可。然后你可以像这样使用它:
int x = spawnPoint["x"].asInt();
int y = spawnPoint["y"].asInt();
做起来容易多了。