2013-03-15 66 views
0

我嘗試將http://www.raywenderlich.com/29460/collisions-and-collectables-how-to-make-a-tile-based-game-with-cocos2d-2-x-part-2教程轉換爲cocos2dx,並在此行中獲取錯誤 : CCString * collision = properties-> objectForKey(「Collidable」);Coos2dx中的類型轉換錯誤

void HelloWorld::setPlayerPosition(CCPoint position) 
{ 
CCPoint tileCoord = this->tileCoordForPosition(position); 
int tileGid = _meta->tileGIDAt(tileCoord); 
if(tileGid) 
{ 
    CCDictionary *properties = _tileMap->propertiesForGID(tileGid); 
    if(properties) 
    { 
     CCString *collision = properties->objectForKey("Collidable"); 
     if(collision && (collision->compare("True"))) 
      return; 
    } 
} 
_player->setPosition(position); 

}

+0

「......但是那個錯誤可能是什麼?」,他很奇怪地想。將有助於添加錯誤消息。 – LearnCocos2D 2013-03-15 10:51:45

+0

它給錯誤............從'const cocos2d :: CCString *'無效轉換爲'cocos2d :: CCString *'[-fpermissive] – Singhak 2013-03-16 06:38:08

回答

0

編譯器抱怨的CCString的 「常量性」 的損失。 objectForKey方法返回const CCString*,但您將其分配給CCString*,這意味着它不再是const

你有三種選擇來解決這個問題,從最簡單的:

  • 聲明你CCString常量(無缺點這除了不能夠另一CCString分配到同一個對象):

const CCString *collision = properties->objectForKey("Collidable");

  • 顯式強制常量遠(這可能不依賴於編譯器設置被允許):

CCString *collision = (CCString*)properties->objectForKey("Collidable");

  • 從編譯器設置中刪除permissive標誌忽略這個錯誤。不推薦,因爲它允許你違反常量。