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
的值。
什么是pixels
? pixels.width
有定义吗?尝试使用 Math.floor()
而不是 cast(pixels.width / 16, Int)
.
我所有的东西都是最新的,我正在使用 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
的值。
什么是pixels
? pixels.width
有定义吗?尝试使用 Math.floor()
而不是 cast(pixels.width / 16, Int)
.