2
キャンバスに複数の矢印を表示しようとしていますので、クリックすると完全に新しい矢印が作成されます。私はあなたが見ることができるように初心者です、どのようにコードを改善するための任意の助けやアイデアをありがとう!複数の矢印をキャンバスに複数回クリックする方法
var arrowX = -300;
var arrowY = 300;
window.onload = function() {
canvas = document.getElementById("myCanvas");
gc = canvas.getContext("2d");
document.addEventListener("click", mouseClickHandler, false);
window.setInterval(render, 200);
arrow = document.getElementById("arrow");
};
function mouseClickHandler(event) {
if (event.target.tagName.localeCompare("canvas") && event.button == 0) {
arrowX = event.clientX;
arrowY = event.clientY;
}
}
function arrowDown() {
//makes arrow go down
if (arrowY < 450) {
arrowY += 6;
}
if (arrowY < 250) {
arrowY -= 3;
}
}
function render() {
gc.clearRect(0, 0, 1500, 500);
gc.drawImage(arrow, arrowX, arrowY);
arrowDown();
}
<canvas id="myCanvas" width="1500" height="500" style="border:1px solid black;" tabindex="1" onclick="mouseClickHandler(event);">
<img id="arrow" class="arrow" src="https://i.stack.imgur.com/evnjm.png" width="20" height="50" />
</canvas>
です。また、 'arrowY = arrowY + = 6'は 'arrowY + = 6'と同じです。これは' arrowY = arrowY + 6'の略です。ちょうどコメント。 – PHPglue
あなたは 'var bc = canvasElement.getBoundingClientRect();に基づいてこれらの座標を計算したいと思うでしょう。 arrowX = event.clientX-bc.left; arrowY = event.clientY-bc.top; '。キャンバスの位置が実際にcanvasElementのベースになっている場合、 'event.clientX'と' event.clientY'だけを考慮に入れています。 – PHPglue
ありがとうございますが、私はそれを動作させるように見えません。私が望むのは、複数の矢印を一度に飛ばすことです。キャンバスをクリックすると、全く新しい矢印が作成されます。 – VavrisX