【问题标题】:Cocos2d-x TiledMap, return a nullptr when invoking getLayer() to get the collision layer?Cocos2d-x TiledMap,调用getLayer()获取碰撞层时返回nullptr?
【发布时间】:2018-10-25 15:05:47
【问题描述】:

我已经为null 指针苦苦挣扎了好几个小时!当我使用getLayer() 方法从cocos2d-x 中的平铺地图中获取图层时发生了这种情况(使用Tailed Map Editor 编辑了tailed map)。

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()方法中设置了断点,程序遍历并找到除了碰撞层之外的所有层。任何人都可以告诉我如何处理这个问题?

【问题讨论】:

  • 您显示的 TMX 文件似乎不完整。您不需要向我们展示完整的文件,甚至可以为不重要的部分添加省略号 (...),但至少不要用不完整的标签将其分割。
  • 感谢您的建议!
  • 感谢您回答我的问题。嗯,其实我把我所有的资源文件都放对了,不过还是谢谢两位,这个问题我已经解决了。

标签: c++ cocos2d-x null-pointer


【解决方案1】:

好吧,我终于解决了这个问题(发生后 4 小时)......尽管我什至不知道为什么。 解决方案是编辑 collide.tsx 文件。我试读了一下,发现一句话:

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

而且这个“trans=”看起来很奇怪......所以我删除了它。然后问题就解决了。

【讨论】:

  • 应该是trans="ff00ff",值用双引号括起来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
相关资源
最近更新 更多