gpt4 book ai didi

javascript - 不改变变量

转载 作者:行者123 更新时间:2023-12-01 03:20:26 24 4
gpt4 key购买 nike

我正在尝试编写 Snake 代码,但遇到了一些问题。

var ctx = document.getElementById('ctx').getContext('2d');
var canvas = document.getElementById('ctx');

var y = [240, 230, 220];
var x = [240, 240, 240];

var xSpeed = 0;
var ySpeed = 0;

function load() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
for (p = 0; p < x.length; p++) {
ctx.fillStyle = "black";
ctx.fillRect(x[p], y[p], 10, 10);
}
}

function keyDown() {
var key = event.keyCode; /*getting keyCode of pressed key*/
ctx.fillStyle = "black"; /*color of rectangle*/
if (key == 39) { //RIGHT
var xSpeed = 10;
var ySpeed = 0;
console.log("right");
} else if (key == 37) { //LEFT
var xSpeed = -10;
var ySpeed = 0;
console.log("left");
} else if (key == 38) { //UP
var xSpeed = 0;
var ySpeed = -10;
console.log("up");
} else if (key == 40) { //DOWN
var xSpeed = 0;
var ySpeed = 10;
console.log("down");
}
}

function update() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
/*if (x[0] >= 490) {
xSpeed = 0;
} else if (y[0] >= 490) {
ySpeed = 0;
}*/
for (w = 0; w < x.length; w++) {
y[w] += ySpeed;
x[w] += xSpeed;
}
for (i = 0; i < x.length; i++) {
ctx.fillStyle = "black";
ctx.fillRect(x[i], y[i], 10, 10);
}

console.log(xSpeed);
console.log(ySpeed);
}

setInterval(update, 500);
<!DOCTYPE html>
<html>

<head>
<link rel="shortcut icon" href="#">
<title>The Snake Game</title>
</head>
<style>
#ctx {
position: absolute;
/*it can be fixed too*/
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
/*this to solve "the content will not be cut when the window is smaller than the content":*/
max-width: 100%;
max-height: 100%;
overflow: auto;
}
</style>

<body onkeydown="keyDown()" onload="load()">
<center><canvas id="ctx" width="500" height="500" style="border:1px solid black"></canvas></center>
</body>
<script src="script.js"></script>

</html>

如果您运行代码,您会发现变量 xSpeed 和 ySpeed 没有改变。我尝试了橡皮鸭调试,但一无所获。我才14岁,所以请不要 mock 我的愚蠢。 :D 谢谢你的建议。托马斯

最佳答案

您必须删除 if 中变量之前的 var

else if (key == 38) { //UP
xSpeed = 0;
ySpeed = -10;
console.log("up");
...

如果在变量前添加 var,则该变量仅在本地函数中可见,而在其外部不可见。

这是一种更好的编写方式:

function keyDown() {
var key = event.keyCode; /*getting keyCode of pressed key*/
ctx.fillStyle = "black"; /*color of rectangle*/

switch( key){
case 39: //RIGHT
xSpeed = 10;
ySpeed = 0;
console.log("right");
break;
case 37: //Left
xSpeed = -10;
ySpeed = 0;
console.log("left");
break;
case 38: // Up
xSpeed = 0;
ySpeed = -10;
console.log("up");
break;
case 40: // Down
xSpeed = 0;
ySpeed = 10;
console.log("down");
}
}

或者甚至更好:

var speed= {
37: {
xSpeed : -10,
ySpeed : 0,
text: 'left'
},
38: {
xSpeed : 0,
ySpeed = -0,
text: 'up'
},
39: {
xSpeed : 10,
ySpeed = 0,
text: 'right'
},
40: {
xSpeed : 0,
ySpeed = 10,
text: 'down'
}
}


function keyDown() {
var key = event.keyCode; /*getting keyCode of pressed key*/
ctx.fillStyle = "black"; /*color of rectangle*/

xSpeed = speed[key].xSpeed ;
ySpeed = speed[key].ySpeed ;
console.log(speed[key].text);
}

关于javascript - 不改变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45253802/

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