我希望将字体或静态图像放到画布上,但不确定使用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);
});
);
唯一的问题是文本总是被画在顶部,所以我的拖放对象一直在文本后面。我只想让文本保持在背景中,就像静态图像一样,但我认为将字体绘制到画布上可能比让用户下载另一张图像更好。有什么帮助吗?
发布于 2014-10-12 12:13:22
Matter.js中包含的呈现器实际上只是为了演示,所以最好的方法是复制一个示例Render.js,然后在那里实现所有的呈现(其中Render.world
是每个滴答上调用的条目方法)。
将对象名称更改为类似于CustomRenderer
的其他内容,然后在Engine.create
选项中传递您的呈现类:
var engine = Engine.create({
render: {
element: element,
controller: CustomRenderer
}
});
发布于 2016-02-10 22:24:33
有点晚了,但是这方面的文档显示,在将sprite添加到呈现器中时,使用了正确的方法:
let head = Bodies.circle(450, 50, 17, {
render: {
sprite: {
texture: './img/head.png'
}
}}
);
https://github.com/liabru/matter-js/blob/master/examples/sprites.js
(目前还不知道问题的正文部分)
发布于 2018-11-01 12:38:37
这是如何将函数中的文本字符串作为基本图像返回的方法。
createImage($string) {
let drawing = document.createElement("canvas");
drawing.width = '150'
drawing.height = '150'
let ctx = drawing.getContext("2d");
ctx.fillStyle = "blue";
//ctx.fillRect(0, 0, 150, 150);
ctx.beginPath();
ctx.arc(75, 75, 20, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();
ctx.fillStyle = "#fff";
ctx.font = "20pt sans-serif";
ctx.textAlign = "center";
ctx.fillText($string, 75, 85);
// ctx.strokeText("Canvas Rocks!", 5, 130);
return drawing.toDataURL("image/png");
},
// and then e.g. in your sprites
// ...
render: {
sprite: {
texture: createImage("Your Text String")
xScale: 1,
yScale: 1
}
}
https://stackoverflow.com/questions/26043360
复制相似问题