刚开始使用tmx平铺的地图文件作为我的2D平台游戏的地图。这是迄今为止的代码。TMX Tiled Andengine Android - FATAL EXCEPTION -
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:未找到属性值:“宽度”
这是我的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)
(编辑 - 大部分得益于马捷Spili用于编辑的logcat这是对现在的眼睛更容易:!d)
编辑14年4月29日
所以,所以我说话到Tiled的制造商比约恩。
- 我 - 它只是似乎没有不管我用什么样的代码,但因为它总是错误
我 - 当我看到的例子TMX文件中的一个,在最后它看起来像....
<objectgroup name="Unwalkable" width="400" height="21">
- 我 - 但是当我看出我创建的tmx文件时,没有高度和宽度的规范。你如何指定对象层的高度/宽度?
- bjorn - dpod:这些属性不再写出来。
- bjorn - dpod:AndEngine应该固定不需要它们。由于对象组没有大小限制,它们基本上总是毫无意义的。
- 比约恩 - 像“getTMXObjectGroupProperties”或“containsTMXProperty”这些函数名是绝对疯了...
- 比约恩 - 在瓷砖,该代码会更喜欢“的foreach(对象组*组,MAP-> objectGroups() ){if(group-> hasProperty(“wall”)){...
- IRC - [15:02] == bjorn [〜quassel @ pdpc/supporter/active/bjorn]
- IRC - [15 :02] ==真实姓名:托尔比约恩Lindeijer
- IRC - [15:02] ==渠道:#tiled
- IRC - [15:02] ==服务器:asimov.freenode.net [TX,USA]
- IRC - [15:02] ==帐户:比约恩
- IRC - [15:02] ==的WHOIS
- 我结束 - 哦,我的天哪你是谁做瓷砖的家伙?
这很有趣哈哈。但现在我已经有更多的问题!究竟是什么?
感谢您的支持。我能够一起移除物体层,并使地图显示在GLES2上的屏幕上。示例TMX文件看起来很有趣,并且具有对象层的宽度和高度属性,我认为您不能在Tiled应用程序本身中进行配置。虽然我没有设法在GLES2中创建墙体对象,但我决定在锚中心完成所有这些工作。尽管我遇到了很多不同的问题,但如果你愿意帮助我,我会很感激,并会保持更新。感谢您的时间:) – GoodyGreen
好的,所以我陷入了我在GLES 2中的位置。现在我得到了我在GLES 2中收到的同样的错误。“没有找到属性的值:'width'”我是寻找一个andengine锚中心示例,展示如何将TMX对象转换为矩形和我可以在引擎中操作和使用的项目。我只会放弃我用来实现矩形的示例代码。如果你熟悉这种想法,那么你的帮助是非常感谢的( – GoodyGreen
)所以我有幸与制作Tiled的bjorn交谈,谈话对此太长了,所以我会把它作为一个编辑发布给我原来的帖子。 – GoodyGreen