2

HaxeFlixel で Nape を使用しようとしています。悲しいことに、addons.napeパッケージの使用方法に関するドキュメントはほとんどなく、このコードが白い四角形 ( ) を動かしていない理由がわかりません_test。(簡単にするためにインポートを省略しました)

class PlayState extends FlxNapeState
{
    var _test = new FlxNapeSprite(16, 16);

    override public function create():Void
    {
        super.create();

        _test.makeGraphic(16, 16);
        _test.body.type = BodyType.KINEMATIC;
        add(_test);
    }

    override public function update():Void
    {
        _test.body.velocity.x = 100;
        super.update();
    }   
}
4

1 に答える 1

2

コードには 2 つの問題があります。

  1. _test変数を直接初期化すると、のFlxNapeSpriteコンストラクターでコンストラクター呼び出しが発生しますPlayState。状態コンストラクターのcreate()に呼び出されます。これは、Flixel が新しい状態のコンストラクター呼び出しと(たとえば、グラフィックスが破棄され、この場合、Napeインスタンスは呼び出しで作成されるため、まだ存在しない) のに内部クリーンアップを行うため、クラッシュやその他の奇妙な動作を引き起こす可能性があります)。 .create()Spacesuper.create()

  2. FlxNapeSpriteコンストラクターには、デフォルトcreateRectangularBodytrue同じ名前の関数 if を呼び出す引数がありますtrue。アセットをコンストラクターに渡さないため、最終的にShape幅と高さが 0 の が作成されます。これにより、次のエラーが発生します。

    Error: Cannot simulate with an invalid Polygon

    代わりに、後でcreateRectangularBody()手動で呼び出して、グラフィックの寸法に一致するmakeGraphic()を作成する必要があります。Shape

完全な動作コードは次のようになります。

package;

import flixel.addons.nape.FlxNapeSprite;
import flixel.addons.nape.FlxNapeState;

class PlayState extends FlxNapeState
{
    override public function create():Void
    {
        super.create();

        var _test = new FlxNapeSprite(16, 16);
        _test.makeGraphic(16, 16);
        _test.createRectangularBody();
        _test.body.velocity.x = 100;
        add(_test);
    }
}

ドキュメンテーションに関しては、FlxNape デモが学習に役立つ優れたリソースです。

于 2015-07-09T18:15:43.237 に答える