我正在关注这个关于在我的游戏中实现tilemaps的惊人教程 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-> objectNamed(" SpawnPoint");
声明没有转换此objectGroup的函数。 (错误没有合适的转换函数,从Cocos2d :: Valuemap到Cocos2d :: CCdictionary existsis)
这看起来像是来自不同的cocos'使用的版本(教程是v2和我' m v3)。
有谁知道如何解决这个问题?
答案 0 :(得分:1)
为什么不使用自动指针,并使用普通的C ++语法访问返回的无序映射。请参阅下面的代码示例。
auto spawnPoints = objectGroupd->objectNamed("SpawnPoint");
int x = spawnPoints.at("x").asInt();
int y = spawnPoints.at("y").asInt();
这将为您提供与raywenderlich教程期望您具有的相同的值。
答案 1 :(得分:0)
CCDictionary现在是ValueMap。所以只需将其更改为ValueMap即可。然后你就可以这样使用它:
int x = spawnPoint["x"].asInt();
int y = spawnPoint["y"].asInt();
更容易做到。