2013-03-15 2 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 * столкновение = свойства-> 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

+0

он дает ошибку ............ неверное преобразование из 'const cocos2d :: CCString *' в 'cocos2d :: CCString *' [-fpermissive] – Singhak

ответ

0

Компилятор жалуется на потерю "сопзЬ-Несс" в CCString. Метод objectForKey возвращает const CCString*, но вы назначаете его CCString*, что означает, что он больше не const.

У вас есть три варианта, чтобы исправить это, начиная с самого простого:

  • Объявить свой CCString сопзЬ (без минусов это другое, чем не имея возможности назначить другую CCString тот же объект):

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

  • Явное отливать Const прочь (это не может быть разрешено в зависимости от настроек компилятора):

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

  • Снимите permissive флаг в настройках компилятора, чтобы игнорировать эту ошибку. Не рекомендуется, потому что это позволяет вам нарушать константу.
Смежные вопросы