我的画布上有4个矩形,我想用一张图片填充每个矩形,例如使用i1.png。 画布已经旋转并且缩放,当我旋转图像时,它们不在原来的位置上。我该如何解决?
代码:
<html>
<head>
<script src="jquery-3.4.1.js"></script>
</head>
<body bgcolor="black">
<canvas id="tutorial" width="500" height="500"></canvas>
<script type="text/javascript">
var canvas = document.getElementById("tutorial"),
ctx = canvas.getContext("2d"),
rects = [
{x: 0, y: 0, w: 100, h: 100},
{x: 0, y: 100, w: 100, h: 100},
{x: 100, y: 100, w: 100, h: 100},
{x: 100, y: 0, w: 100, h: 100}
],
i = 0,
r;
ctx.translate(500, 500);
ctx.scale(0.71, 0.3834);
ctx.rotate(-0.25 * Math.PI);
canvas.onmousemove = function(e) {
var rect = this.getBoundingClientRect(),
x = e.clientX - rect.left,
y = e.clientY - rect.top,
i = 0,
r;
ctx.clearRect(0, 0, canvas.width, canvas.height);
while (r = rects[i++]) {
ctx.beginPath();
ctx.rect(r.x, r.y, r.w, r.h);
ctx.fillStyle = "#c5de89";
ctx.fill();
if(ctx.isPointInPath(x, y)) {
ctx.strokeStyle = "white";
ctx.lineWidth = 5;
ctx.strokeRect(r.x + 5, r.y + 5, r.w - 10, r.h - 10);
ctx.save();
base_image = new Image();
base_image.src = 'https://istack.dev59.com/D3HBL.webp';
ctx.rotate(0.25 * Math.PI);
//console.log(base_image.width);
ctx.drawImage(base_image, 0, 0, base_image.width, base_image.height , r.x , r.y , r.w , r.h);
ctx.restore()
} else {
ctx.fillStyle = "#c5de89";
}
ctx.save();
ctx.restore()
}
};
</script>
</body>
</html>
我的代码结果:
我想要这样填充我的矩形:
这是我们用于此示例的 i1.png :
更多细节(编辑):
我正在尝试创建一个游戏地图,实际上他们创建了一个画布并旋转了它。我想将我的图像附加到每个矩形而不进行任何旋转。我认为形状并不重要,我只想在每个矩形上设置一个图像,而不旋转,但是当我这样做时,它们不再在原来的位置!看看第二张照片,我想创建类似于这样的东西。我希望这张图片能够清楚地表达目的,我们将每个地图块分成 i.stack.imgur.com/kFN6G.jpg ,不考虑我的代码,认为我们想将一个图像层附加到我们的形状上!