如何移动 HaxeFlixel FlxNapeSprite?
How to move a HaxeFlixel FlxNapeSprite?
我正在尝试将 Nape 与 HaxeFlixel 一起使用。遗憾的是,几乎没有关于如何使用 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();
}
}
您的代码有两个问题:
直接初始化 _test
变量会导致 FlxNapeSprite
构造函数调用发生在 PlayState
的构造函数中。 create()
在 状态构造函数之后被调用 。这可能会导致崩溃和其他奇怪的行为,因为 Flixel 在 新状态的构造函数调用和 create()
之间进行内部清理 (例如,在这种情况下,图形被处理Nape Space
实例尚不存在,因为它是在 super.create()
调用中创建的。
FlxNapeSprite
构造函数有一个 createRectangularBody
参数,默认为 true
并在 true
时调用同名函数。由于您没有将任何资产传递给构造函数,它最终会创建一个宽度和高度为 0 的 Shape
。这会导致以下错误:
Error: Cannot simulate with an invalid Polygon
相反,您需要在 makeGraphic()
之后手动调用 createRectangularBody()
以创建与图形尺寸匹配的 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 demo 是一个很好的学习资源。
我正在尝试将 Nape 与 HaxeFlixel 一起使用。遗憾的是,几乎没有关于如何使用 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();
}
}
您的代码有两个问题:
直接初始化
_test
变量会导致FlxNapeSprite
构造函数调用发生在PlayState
的构造函数中。create()
在 状态构造函数之后被调用 。这可能会导致崩溃和其他奇怪的行为,因为 Flixel 在 新状态的构造函数调用和create()
之间进行内部清理 (例如,在这种情况下,图形被处理NapeSpace
实例尚不存在,因为它是在super.create()
调用中创建的。FlxNapeSprite
构造函数有一个createRectangularBody
参数,默认为true
并在true
时调用同名函数。由于您没有将任何资产传递给构造函数,它最终会创建一个宽度和高度为 0 的Shape
。这会导致以下错误:Error: Cannot simulate with an invalid Polygon
相反,您需要在
makeGraphic()
之后手动调用createRectangularBody()
以创建与图形尺寸匹配的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 demo 是一个很好的学习资源。