Matter.js:在画布上放置文本或图像

Bre*_*84c 5 html javascript canvas physics-engine

我想将字体或静态图像放在画布上,但不确定使用 Matter.js 的最佳方法是什么。现在,对于图像,我只是创建一个大小为“0”的主体并将图像 url 放在 render.sprite.texture 属性中。似乎可以解决问题,但是否有不同/更好的方法将静态图像放在画布上?

此外,在创建/绘制其他任何内容之前,我正在使用脚本顶部附近的 'afterRender' 事件将文本放到画布上:

_sceneEvents.push(
    Events.on(_engine, 'afterRender', function(event) {
        var context = _engine.render.context;
        context.font = "45px 'Cabin Sketch'";
        context.fillText("THROW OBJECT HERE", 150, 80);
    });
);
Run Code Online (Sandbox Code Playgroud)

唯一的问题是文本一直被绘制在顶部,所以我的可拖动对象一直在文本后面。我只希望文本留在背景中,就像静态图像一样,但我认为在画布上绘制字体可能比让用户下载另一个图像更好。有什么帮助吗?

lia*_*bru 5

Matter.js 中包含的渲染器实际上仅用于演示,因此最好的做法是制作示例Render.js的副本,然后在那里实现所有渲染(Render.world每个刻度调用的入口方法在哪里)。

将对象名称更改为其他名称CustomRenderer,然后在Engine.create选项中传递渲染类:

var engine = Engine.create({
    render: {
        element: element,
        controller: CustomRenderer
    }
});
Run Code Online (Sandbox Code Playgroud)