我正在尝试将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();
}
}
答案 0 :(得分:2)
您的代码存在两个问题:
直接初始化_test
变量会导致在FlxNapeSprite
的构造函数中发生PlayState
构造函数调用。在状态构造函数之后,create()
被称为。这可能会导致崩溃和其他奇怪的行为,因为Flixel在新状态的构造函数调用之间进行内部清理和create()
(例如,图形处理,在这种情况下是Nape { {1}}实例尚未存在,因为它是在Space
调用中创建的。
super.create()
构造函数有一个FlxNapeSprite
参数,默认为createRectangularBody
,如果true
则调用相同名称的函数。由于您没有将任何资产传递给构造函数,因此最终会创建宽度和高度为0的true
。这会导致以下错误:
Shape
相反,您需要在Error: Cannot simulate with an invalid Polygon
之后手动调用createRectangularBody()
来创建与图片尺寸相匹配的makeGraphic()
。
完整的工作代码如下所示:
Shape
关于文档,FlxNape demo是一个值得学习的好资源。