我正在尝试在HaxeFlixel中使用Nape。遗憾的是,几乎没有关于如何使用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();
}
}发布于 2015-07-09 18:15:43
您的代码有两个问题:
_test变量将导致FlxNapeSprite构造函数调用发生在PlayState的构造函数中。在状态构造函数之后调用create()。这可能导致崩溃和其他奇怪的行为,因为Flixel在新状态的构造函数调用和create()之间执行内部清理(例如,处理图形,在本例中,由于Nape Space实例是在super.create()调用中创建的,因此它还不存在)。FlxNapeSprite构造函数有一个createRectangularBody参数,默认为true,并调用同名的函数if true。因为您没有将任何资产传递给构造函数,所以它最终创建了宽度和高度为0的Shape。这将导致以下错误:
Error: Cannot simulate with an invalid Polygon
相反,您需要在createRectangularBody()之后手动调用makeGraphic(),以创建与图形尺寸匹配的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演示是一个很好的学习资源。
https://stackoverflow.com/questions/31323591
复制相似问题