0

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);

            }

        }
    }
}

しかし、それは私にこのエラーを与えています - FATAL EXCEPTION: UpdateThread and java.lang.IllegalArgumenetException: No value found for attribute: '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)

(編集 - LogCat を編集してくれた Matej Spili に感謝します! 目に優しくなりました! :D)

編集 4/29/14

そこで、Tiled のメーカーであるビョルンに話を聞きました。

  • 私-常にそのエラーであるため、使用するコードは問題ではないようです
  • 私 - サンプル tmx ファイルの 1 つを見ると、最後は次のようになります。

    <objectgroup name="Unwalkable" width="400" height="21">
    
  • 私-しかし、作成したtmxファイルを見ると、高さと幅の指定がありません。オブジェクトレイヤーの高さ/幅をどのように指定しますか?
  • bjorn - dpod: これらの属性は書き出されなくなりました。
  • bjorn - dpod: AndEngine はそれらを必要としないように修正する必要があります。オブジェクト グループにはサイズの制限がないため、基本的に常に無意味でした。
  • bjorn - 「getTMXObjectGroupProperties」や「containsTMXProperty」などの関数名はまったくおかしなことです...
  • bjorn - Tiled では、そのコードは次のようになります: "foreach (ObjectGroup *group, map->objectGroups()) { if (group->hasProperty("wall")) { ...
  • IRC - [15:02] == ビョルン [~quassel@pdpc/supporter/active/bjorn]
  • IRC - [15:02] == 本名: Thorbjørn Lindeijer
  • IRC - [15:02] == チャネル: #tiled
  • IRC - [15:02] == サーバー: asimov.freenode.net [TX、USA]
  • IRC - [15:02] == アカウント : bjorn
  • IRC - [15:02] == WHOIS の終わり
  • 私 - なんてこった、あなたはタイルを作った人ですか?!

楽しかったです笑。しかし今、私はより多くの質問を持っています!foreach とは一体何なのでしょうか。

4

2 に答える 2

0

AndEngine フォーラムでサポートを受けています。あらゆる段階で私を助けてくれたサーディデイと、あちこちで貴重な指針を与えるために時間を割いてくれたビョルンに特に感謝します.

解決策は、TMX 拡張機能自体をやや不格好にすることです。拡張機能の要件を満たすには、TMX ファイル自体をエディターで手動で編集し (必要に応じて Eclipse でこれを行うことができます)、"height=x" と "width=x" の値を追加する必要があります。ここで、x は文字通り等しいです。 TMX ファイル内のすべてのオブジェクト レイヤーに対して任意の数。

すべての TMX 拡張機能がこのようなものであるとは限りませんが、RealMayo で使用した拡張機能にはこれが必要でした。Therdiday は、これらの空の属性を必要としない彼のバージョンを推奨しました。また、「ところで、私のバージョンとデフォルトのアンカー センター バージョンの唯一の違いは、境界付きカメラとポリライン サポートの実装です。」https://github.com/Therdiday/AndEngineTMXTiledMapExtension

とにかく、誰かが同じような問題を抱えているなら、私にメッセージを送ってください。より多くの情報を提供できます。

于 2014-05-03T05:43:13.317 に答える
0

.tmx ファイルは、タイル化された作成済みマップに関する情報を含む単なる xml です。

SAX (Simple API for XML パーサー) が幅属性を取得しようとしているようですが、それを見つけることができません。

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。

.tmx ファイルに、パーサーが期待する width プロパティがあるかどうかを確認してください。

(GoodyGreen-おっと。間違った投稿を編集しました。編集を削除して問題にしました。)

于 2014-04-28T12:15:00.797 に答える