我拥有最新的一切,我正在使用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)
。