gpt4 book ai didi

javascript - JavaScript 中的 2048 : updating the canvas

转载 作者:行者123 更新时间:2023-11-28 18:38:31 25 4
gpt4 key购买 nike

我在高中上计算机科学课,对于我的期末项目,我和我的搭档决定制作 2048。我们不会让瓷砖“移动”,而是 4x4 棋盘会移动。拥有“图 block ”,这些“图 block ”具有棋盘上显示的“图 block ”的数量和颜色属性。我们能够更改图 block 的 x 和 y 坐标,但 Canvas 不会更新。我们已经遇到这个问题两周了,并尝试了一切,但没有任何效果。我们的代码发布在下面。请记住,由于我们只使用了 javascript 几个月,而且只做非常简单的事情,所以我们的理解是有限的。感谢您的帮助。

<!DOCTYPE html>
<html lang = "en">
<body style="background-color:lightgrey;">
<title>2048</title>
<canvas id="myCanvas" width="410" height="410" style="border:1px solid #d3d3d3;">
</canvas>
<script>
var x = 10;
var y = 10;
document.addEventListener('keydown', function(event)
{
if(event.keyCode == 37)//left
{
x -= 100;
console.log("x:"+ x);
}
else if(event.keyCode == 38)//up
{
y -= 100;
console.log("y:"+ y);
}
else if(event.keyCode == 39)//right
{
x += 100;
console.log("x:"+ x);
}
else if(event.keyCode == 40)//down
{
y += 100;
console.log("y:"+ y);
}
});
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");

// grey rectangle
ctx.beginPath();
ctx.lineWidth = "2";
ctx.strokeStyle = "grey";
ctx.rect(5, 5, 400, 400);
ctx.stroke();

// blue rectangle
ctx.beginPath();
ctx.lineWidth = "5";
ctx.strokeStyle = "blue";
ctx.rect(x, y, 100, 100);
ctx.stroke();
ctx.fillStyle = "blue";
ctx.fill();
</script>

</body>
</html>

最佳答案

你的游戏需要的是一个游戏循环。因此绘制需要连续进行,目前您一开始只绘制一次。

var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");

function draw() {
// clear the canvas so the old rectangles are gone
ctx.clearRect(0, 0, c.width, c.height);

// grey rectangle
ctx.beginPath();
ctx.lineWidth = "2";
ctx.strokeStyle = "grey";
ctx.rect(5, 5, 400, 400);
ctx.stroke();

// blue rectangle
ctx.beginPath();
ctx.lineWidth = "5";
ctx.strokeStyle = "blue";
ctx.rect(x, y, 100, 100);
ctx.stroke();
ctx.fillStyle = "blue";
ctx.fill();
}

// repeat game loop function forever, 30 times per second
window.setInterval(draw, 1000.0 / 30.0)

注意window.setIntervalctx.clearRect的使用。

关于javascript - JavaScript 中的 2048 : updating the canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36553052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com