Cocos2d-x TiledMap, возвращать nullptr при вызове getLayer () для получения слоя столкновения? - PullRequest
0 голосов
/ 15 мая 2018

Я боролся с указателем null часами! Это произошло, когда я использовал метод getLayer(), чтобы получить слой из мозаичной карты в cocos2d-x (хвостатая карта редактируется с помощью редактора хвостатых карт).

map = TMXTiledMap::create("map/map1.tmx");
map->setAnchorPoint(Vec2(0.5, 0.5));
map->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2 - 40));
this->addChild(map, 0, 100);
collidable = map->getLayer("collide")
collidable->setVisible(false);

Программа не нашла слой "столкновения" (это мозаичный слой) на моей карте с хвостами. Тем не менее, он действительно существует в файле TMX:

<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" tiledversion="1.1.5" orientation="orthogonal" renderorder="right-down" width="24" height="18" tilewidth="40" tileheight="40" infinite="0" nextlayerid="14" nextobjectid="2">

 <tileset firstgid="1" name="Background" tilewidth="40" tileheight="40" tilecount="7" columns="7">
  <image source="mapItems/background.png" width="280" height="40"/>
 </tileset>
 <tileset firstgid="8" name="tiles" tilewidth="40" tileheight="40" tilecount="16" columns="8">
  <image source="mapItems/tiles.png" width="320" height="80"/>
 </tileset>
 <tileset firstgid="24" source="mapItems/collide.tsx"/>
 <layer id="5" name="background" width="24" height="18">
  <data encoding="base64" compression="zlib">
   ...(some code)
 </layer>
 <layer id="11" name="collide" width="24" height="18">
  <properties>
   <property name="collidable" value="true"/>
  </properties>
  <data encoding="base64" compression="zlib">
   ...
  </data>
 </layer>
 <layer id="6" name="bricks" width="24" height="18">
  <data encoding="base64" compression="zlib">
   ...
  </data>
 </layer>
 <layer id="7" name="tops" width="24" height="18">
  <data encoding="base64" compression="zlib">
   ...
  </data>
 </layer>
</map>

Более того, я установил точку останова в методе getLayer(), и программа обходит и находит все слои, кроме сталкивающегося. Кто-нибудь может показать мне, как бороться с этой проблемой?

1 Ответ

0 голосов
/ 15 мая 2018

Хорошо, наконец-то я решил эту проблему (4 часа с момента ее возникновения) ... Несмотря на то, что я даже не знаю почему. Решением является редактирование файла collide.tsx. Я попытался прочитать его и нашел предложение:

 <image source="collide.png" trans=ff00ff width="40" height="40"/>

И это "trans =" ​​показалось довольно странным ... Так что я удалил его. Тогда проблема была решена.

...