刚刚开始使用tmx平铺地图文件作为我的2d平台游戏的地图。这是我到目前为止的代码。
private void loadLevel() {
// TODO Auto-generated method stub
try {
TMXLoader tmxLoader = new TMXLoader(
ResourceManager.getInstance().activity.getAssets(),
engine.getTextureManager(),
TextureOptions.BILINEAR_PREMULTIPLYALPHA, vbom);
this.mTMXTiledMap = tmxLoader.loadFromAsset("tmx/testmap2.tmx");
} catch (final TMXLoadException tmxle) {
Debug.e(tmxle);
}
for (int i = 0; i < this.mTMXTiledMap.getTMXLayers().size(); i++) {
TMXLayer layer = this.mTMXTiledMap.getTMXLayers().get(i);
this.attachChild(layer);
}
for (final TMXObjectGroup group : this.mTMXTiledMap
.getTMXObjectGroups()) {
for (final TMXObject object : group.getTMXObjects()) {
if (group.getName().equals("Unwalkable")) {
Rectangle rect = new Rectangle(object.getX(),
object.getY(), object.getWidth(),
object.getHeight(), vbom);
FixtureDef boxFixtureDef = PhysicsFactory.createFixtureDef(
0.0f, 0.0f, 1f, false,
CATEGORYBIT_WALL,
MASKBITS_WALL, (short) 0);
PhysicsFactory.createBoxBody(physicsWorld, rect,
BodyType.StaticBody, boxFixtureDef);
rect.setVisible(false);
final PhysicsHandler physicsHandler = new PhysicsHandler(
rect);
rect.registerUpdateHandler(physicsHandler);
attachChild(rect);
}
}
}
}
但它给了我这个错误 - 致命错误:UpdateThread和java.lang.IllegalArgumenetException:找不到属性的值:'width'
这是我的tmx文件的问题吗?它是如何编码的或如何设置的?还是在编码端?谢谢你们,我真的很感激帮助。这是LogCat的其余部分,以防您使用它。
04-25 08:36:01.716: E/AndroidRuntime(13119): FATAL EXCEPTION: UpdateThread
04-25 08:36:01.716: E/AndroidRuntime(13119): java.lang.IllegalArgumentException: No value found for attribute: 'width'
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.util.SAXUtils.getAttributeOrThrow(SAXUtils.java:47)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.util.SAXUtils.getIntAttributeOrThrow(SAXUtils.java:86)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.extension.tmx.TMXObjectGroup.<init>(TMXObjectGroup.java:37)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.extension.tmx.TMXParser.startElement(TMXParser.java:161)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.apache.harmony.xml.ExpatParser.startElement(ExpatParser.java:143)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.apache.harmony.xml.ExpatParser.appendBytes(Native Method)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:513)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:474)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:321)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:279)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.extension.tmx.TMXLoader.load(TMXLoader.java:117)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.extension.tmx.TMXLoader.loadFromAsset(TMXLoader.java:102)
04-25 08:36:01.716: E/AndroidRuntime(13119): at com.meowcatfighter.goodygreen.scene.GameScene.loadLevel(GameScene.java:96)
04-25 08:36:01.716: E/AndroidRuntime(13119): at com.meowcatfighter.goodygreen.scene.GameScene.createScene(GameScene.java:85)
04-25 08:36:01.716: E/AndroidRuntime(13119): at com.meowcatfighter.goodygreen.scene.SceneManager.setGameScene(SceneManager.java:75)
04-25 08:36:01.716: E/AndroidRuntime(13119): at com.meowcatfighter.goodygreen.scene.MainMenuScene.onMenuItemClicked(MainMenuScene.java:66)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.entity.scene.menu.MenuScene.onAreaTouched(MenuScene.java:139)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.entity.scene.Scene.onAreaTouchEvent(Scene.java:413)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:357)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.entity.scene.CameraScene.onSceneTouchEvent(CameraScene.java:64)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.entity.scene.Scene.onChildSceneTouchEvent(Scene.java:420)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:338)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.engine.Engine.onTouchScene(Engine.java:452)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.engine.Engine.onTouchEvent(Engine.java:438)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.input.touch.controller.BaseTouchController$TouchEventRunnablePoolItem.run(BaseTouchController.java:102)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:54)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:1)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.util.adt.pool.PoolUpdateHandler.onUpdate(PoolUpdateHandler.java:88)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.input.touch.controller.BaseTouchController.onUpdate(BaseTouchController.java:62)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.engine.Engine.onUpdate(Engine.java:584)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.engine.Engine.onTickUpdate(Engine.java:548)
04-25 08:36:01.716: E/AndroidRuntime(13119): at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820)
(编辑 - 非常感谢Matej Spili编辑LogCat!现在眼睛更容易了!:D)
EDIT 4/29/14
所以,所以我和Tiled的制造商bjorn谈过。
我 - 当我看一个示例tmx文件时,最后它看起来像....
<objectgroup name="Unwalkable" width="400" height="21">
那很有趣哈哈。但现在我有更多问题!到底是什么东西?
答案 0 :(得分:0)
您的.tmx文件只是一个xml,其中包含有关平铺创建的地图的一些信息。
似乎SAX(XML解析器的简单API)试图从中获取宽度属性,但它无法找到它。
跟进andengine SAXUtils.java:
final String value = pAttributes.getValue("", pAttributeName);
pAttributes属于Attributes:
http://www.saxproject.org/apidoc/org/xml/sax/Attributes.html#getValue(java.lang.String,java.lang.String)
返回:作为字符串的属性值,如果属性为null,则返回null 不在列表中。
检查.tmx文件是否具有解析器所期望的width属性。
(GoodyGreen- Woops。我编辑了错误的帖子。删除编辑并将其置于疑问中。)
答案 1 :(得分:0)
我在AndEngine论坛上得到了支持。特别感谢Therdiday帮助我完成每一步,并且为了给我提供有价值的指示而不知所措。
解决方案是TMX扩展本身变得相当笨重。要满足扩展的要求,您必须在编辑器中手动编辑TMX文件(如果需要,可以在eclipse中执行此操作)并添加&#34; height = x&#34;和&#34; width = x&#34;对于TMX文件中的每个对象层,其中x等于字面上的任何数字。
我想不是每个TMX扩展都是这样的,但我使用RealMayo的扩展需要它。 Therdiday推荐了他的版本,因为它不需要那些空属性。另外,&#34; BTW,我的版本和默认锚点中心版本之间的唯一区别是它有限的相机和折线支持的实现。&#34; https://github.com/Therdiday/AndEngineTMXTiledMapExtension
无论如何,如果有人遇到类似问题,请给我发消息。我可以提供更多信息。