Исключение нарушения доступа к Tilemap TMX

Я пытаюсь загрузить простую плиточную карту TMX, которую я создал с помощью приложения Tiled, в Visual Studio. Но я получаю эту ошибку:

????????????
????????
'TaskHost.exe' (Win32): Loaded 'C:\Windows\System32\StorageProxy.dll'. Cannot find or open the PDB file.
'TaskHost.exe' (Win32): Loaded 'C:\Windows\System32\Windows.Phone.Storage.dll'. Cannot find or open the PDB file.
'TaskHost.exe' (Win32): Loaded 'C:\Windows\System32\PhotosAPI.dll'. Cannot find or open the PDB file.
'TaskHost.exe' (Win32): Loaded 'C:\Windows\System32\PhotosServiceClient.dll'. Cannot find or open the PDB file.
First-chance exception at 0x676D0BFB (libcocos2d_v3.3_WindowsPhone_8.0.dll) in TaskHost.exe: 0xC0000005: Access violation reading location 0x00000178.
Unhandled exception at 0x676D0BFB (libcocos2d_v3.3_WindowsPhone_8.0.dll) in TaskHost.exe: 0xC0000005: Access violation reading location 0x00000178.

The program '[4760] TaskHost.exe' has exited with code 0 (0x0).

Поэтому я немного покопался и обнаружил, что это ошибка, когда ваши ресурсы не находятся в том же каталоге, что и файл TMX, и ошибка, которая в итоге была исправлена ​​по этой ссылке.

http://discuss.cocos2d-x.org/t/cocos2d-x-v3-tilemap-image-source-path/8315

я использую Cocos 2d-x V3.3

Вот код, который я использую в моей функции init() моего MainScene

bool MainScene::init()
{
    if (!Layer::init())
    {
        return false;
    }
...

auto tmxMap = TMXTiledMap::create("TMX/test-tiled-map.tmx");
    this->addChild(tmxMap);

...

    return true;
}

Кроме того, мои ресурсы листов находятся в том же месте, что и мой файл.tmx. т.е. активы / ресурсы /TMX/ папка

Вот мой файл.tmx:

    <?xml version="1.0" encoding="UTF-8"?>
    <map version="1.0" orientation="orthogonal" renderorder="right-down" width="41" height="41" tilewidth="35" tileheight="35" nextobjectid="1">
     <tileset firstgid="1" name="OriginMap" tilewidth="35" tileheight="35">
  <tile id="0">
   <image width="35" height="35" source="water.png"/>
  </tile>
  <tile id="1">
   <image width="35" height="35" source="water-bot.png"/>
  </tile>
  <tile id="2">
   <image width="35" height="35" source="water-bot-left.png"/>
  </tile>
  <tile id="3">
   <image width="35" height="35" source="water-bot-right.png"/>
  </tile>
  <tile id="4">
   <image width="35" height="35" source="water-left.png"/>
  </tile>
  <tile id="5">
   <image width="35" height="35" source="water-right.png"/>
  </tile>
  <tile id="6">
   <image width="35" height="35" source="water-top.png"/>
  </tile>
  <tile id="7">
   <image width="35" height="35" source="water-top-left.png"/>
  </tile>
  <tile id="8">
   <image width="35" height="35" source="water-top-right.png"/>
  </tile>
 </tileset>
     <layer name="Tile Layer 1" width="41" height="41">
      <data>
       <tile gid="1"/>
       <tile gid="1"/>
       <tile gid="1"/>
       <tile gid="1"/>
       <tile gid="1"/>
    ... (lots of tiles of water) ...
       <tile gid="1"/>
       <tile gid="1"/>
      </data>
     </layer>
    </map>

Сгенерированный стек вызовов Visual Studio:

>   libcocos2d_v3.3_WindowsPhone_8.0.dll!cocos2d::Node::addChild(cocos2d::Node * child=0x00000000) Line 1065    C++
    EmpiresAtWarComponent.dll!MainScene::init() Line 94 C++
    EmpiresAtWarComponent.dll!MainScene::create() Line 18   C++
    EmpiresAtWarComponent.dll!MainScene::createScene() Line 9   C++
    EmpiresAtWarComponent.dll!AppDelegate::applicationDidFinishLaunching() Line 41  C++
    libcocos2d_v3.3_WindowsPhone_8.0.dll!cocos2d::Application::run() Line 77    C++
    EmpiresAtWarComponent.dll!Cocos2dRenderer::[DirectXBase]::CreateGLResources() Line 63   C++
    EmpiresAtWarComponent.dll!DirectXBase::UpdateDevice(ID3D11Device1 * device=0x005c7744, ID3D11DeviceContext1 * context=0x005c8820, ID3D11RenderTargetView * renderTargetView=0x03112a38) Line 110    C++
    EmpiresAtWarComponent.dll!cocos2d::Direct3DInterop::Draw(ID3D11Device1 * device=0x005c7744, ID3D11DeviceContext1 * context=0x005c8820, ID3D11RenderTargetView * renderTargetView=0x03112a38) Line 159   C++
    EmpiresAtWarComponent.dll!Direct3DContentProvider::Draw(ID3D11Device1 * device=0x005c7744, ID3D11DeviceContext1 * context=0x005c8820, ID3D11RenderTargetView * renderTargetView=0x03112a38) Line 64 C++

1 ответ

Ответ был прост...

Когда вы импортируете свои ресурсы, вы должны установить

"Копировать, если новее", в качестве значения для вашего ресурса в разделе "Копировать в выходной каталог"... Делать так, чтобы файл копировался в вашу сборку, в противном случае он никогда не достигнет Cocos. Отсюда и "нарушение прав доступа"...

http://www.cocos2d-x.org/news/78

эта ссылка очень старая согласно VS 2014 . Это говорит

Решение очень простое: для поля ресурса "Файл"> "Да", для поля "Тип элемента" - "Не участвует в сборке".

что было не так для меня. Надеюсь, что это поможет любой другой стартер Cocos с этой проблемой!:)

Другие вопросы по тегам