HaxeFlixel:使用 Neko 目标时,FlxSprite 动画在运行时失败

HaxeFlixel: FlxSprite animation fails at runtime with Neko target

我所有的东西都是最新的,我正在使用 HaxeFlixel 来试验一些资产导入和自动化。 我想要完成的是从精灵 sheet 获取帧并自动执行 add.animation 过程。 例如,我需要 sheet 的第一行来形成 运行 动画,第二行是另一个动画等等...

我用这个代码

class ExampleSprite extends FlxSprite
{

    public function new(X:Float=0, Y:Float=0, ?SimpleGraphic:Dynamic) 
    {
        super(X, Y, SimpleGraphic);
        loadGraphic(AssetPaths.examplesprite__png, true, 16, 16);

        // THIS OBVIOUSLY WOULD WORK
        //animation.add("run", [0, 1, 2, 3, 4, 5], 10, true);

        // THIS HAS PROBLEM WHEN RUN WITH NEKO
        var animationArray:Array<Int> = new Array();
        var i:Int = 0;
        var frames_per_row:Int = cast(pixels.width / 16, Int);
        while (i < frames_per_row) {
            animationArray.push(0*frames_per_row + i);
            i++;
        }
        animation.add("run", animationArray, 10, true);

        animation.play("run");
    }

}

我想计算一行中有多少帧,并在单个循环中将正确的帧数放入其自己的动画数组中。 当我将动画添加到 FlxSprite 时,我传递的是包含数字的数组,而不是对所有内容进行硬编码。

这在 html5、flash、windows 中按预期工作。它在 neko 中构建,但在 运行 时失败。

这是我在 Neko

中调试时 运行 得到的结果
Invalid array access
Called from Array::__get line 291
Called from flixel.animation.FlxBaseAnimation::set_curIndex line 34
Called from flixel.animation.FlxAnimation::set_curFrame line 186
Called from flixel.animation.FlxAnimation::play line 112
Called from flixel.animation.FlxAnimationController::play line 493
Called from Player::new line 147
Called from Player::$init line 16
Called from PlayState::create line 44
...

当我填充数组时,奇怪的是,这有效 animationArray.push(i); 但失败了 animationArray.push(0*frames_per_row + i); 我需要第二次写,因为我必须一次填充多个数组

animationArray0.push(0*frames_per_row + i);
animationArray1.push(1*frames_per_row + i);
animationArray2.push(2*frames_per_row + i);
...

我是不是漏掉了什么?

Neko 对 var 初始化非常敏感,所以你应该检查 frames_per_row 的值。

什么是pixelspixels.width 有定义吗?尝试使用 Math.floor() 而不是 cast(pixels.width / 16, Int).