2

我正在尝试将 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();
    }   
}
4

1 回答 1

2

您的代码有两个问题:

  1. 直接初始化_test变量会导致在FlxNapeSprite你的构造函数中发生构造函数调用PlayState。在状态构造函数之后create()调用。这可能会导致崩溃和其他奇怪的行为,因为 Flixel在新状态的构造函数调用和(例如,图形已处理,在这种情况下 Nape实例不存在,因为它是在调用中创建的)之间进行内部清理) .create()Spacesuper.create()

  2. 构造FlxNapeSprite函数有一个createRectangularBody参数,默认为trueif 并调用同名函数true。由于您没有将任何资产传递给构造函数,因此最终会创建Shape宽度和高度为 0 的 a。这会导致以下错误:

    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 演示是一个很好的学习资源。

于 2015-07-09T18:15:43.237 回答