HaxeFlixel:FlxSprite动画在运行时与Neko目标一起失败



我拥有最新的一切,我正在使用HaxeFlixel来尝试一些资产导入和自动化。我试图完成的是从精灵表中获取帧,并自动执行添加动画的过程。例如,我需要第一行的工作表来形成运行动画,第二行的另一个动画等…

我使用这个代码

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的值。

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

相关内容

  • 没有找到相关文章