0

HTML5をターゲットにしたときに、表示オブジェクトの描画順序に問題があります。フラッシュ用にコンパイルすると、期待どおりに動作することに注意してください。問題は非常に基本的なものであり、NMEの問題であるとは信じがたいですが、私が見逃している重大な問題です。

NMEがFlashと同様に機能すると仮定すると、次のコードは、その上に小さな青い長方形が付いた赤い長方形になります。しかし、html5用にビルドすると、赤い長方形が上に描画されます。

package;

import nme.display.Bitmap;
import nme.display.Shape;
import nme.display.Sprite;
import nme.display.StageAlign;
import nme.display.StageScaleMode;
import nme.events.Event;
import nme.Lib;

class Main extends Sprite 
{
    public function new() {
        super();
        addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e) {
        var redContainer : Sprite = new Sprite();

        var redBox : Shape = new Shape();
        redBox.graphics.beginFill(0xaa0000);
        redBox.graphics.drawRect(0, 0, 100, 100);

        var blueBox : Shape = new Shape();
        blueBox.graphics.beginFill(0x0000aa);
        blueBox.graphics.drawRect(0, 0, 50, 50);

        // Add the sprite container 
        this.addChild(redContainer);

        // Add a blue box, which should appear on top of the (empty) container
        this.addChild(blueBox);

        // Add a red box to the container.
        // It should appear *below* the blue box since the container is below
        // the blue box, but the red box is drawn on top of the blue box!
        redContainer.addChild(redBox);
    }

    static public function main() {
        Lib.current.addChild(new Main());
    }
}

Chrome、Firefox、IE9でも同じ動作がします。

4

1 に答える 1

1

コードをビルドしたときは問題なく動作します: my html5 build。NME の最新バージョン (最新の Haxe を使用) を再インストールしてみてください。

DisplayObjects の順序付けに関する問題は、Jeash、Haxe Javascript ライブラリにまだ存在しますが、今のところ、後でオブジェクトを並べ替えたい場合のみ:

this.addChild(redBox);

this.addChild(blueBox);

this.swapChildren(blueBox, redBox);

表示オブジェクトを削除して再度追加しようとしましたが、うまくいきません。setChildIndex も機能しません (https://bugs.launchpad.net/jeash/+bug/1005791)。

于 2012-09-19T05:11:58.970 に答える