【发布时间】:2017-03-08 14:08:20
【问题描述】:
我正在尝试使用 javascript 创建游戏,但它不起作用。 在开发人员工具中,错误如下: “未捕获的类型错误:无法读取未定义的属性‘x’”。 所以我认为错误涉及嵌套数组“circles”。
这是代码:
<!DOCTYPE html>
<html>
<head>
<title>Canvas Tutorial</title>
<script type="text/javascript">
window.onload = draw;
var circles = [{x:200,y:150,r:40,direction:1,speedX:1,speedY:2},{x:200,y:150,r:70,direction:1,speedX:2,speedY:1}];
for (var i=0; i<circles.length; i++) {
function bottomRight() {
circles[i].x += circles[i].speedX;
circles[i].y += circles[i].speedY;
}
function upLeft() {
circles[i].x -= circles[i].speedX;
circles[i].y -= circles[i].speedY;
}
function upRight() {
circles[i].x += circles[i].speedX;
circles[i].y -= circles[i].speedY;
}
function bottomLeft() {
circles[i].x -= circles[i].speedX;
circles[i].y += circles[i].speedY;
}
function draw() {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "black";
ctx.fillRect(0,0,400,300);
ctx.fillStyle = "yellow";
ctx.beginPath();
ctx.arc(circles[i].x,circles[i].y,circles[i].r,0,Math.PI*2,false);
ctx.fill();
if((circles[i].y > 300 - circles[i].r) && circles[i].direction ===1){
circles[i].direction = 2;
} else if((circles[i].x > 400 - circles[i].r) && (circles[i].direction===2)) {
circles[i].direction = 3;
} else if ((circles[i].y > 300 - circles[i].r) && (circles[i].direction===4)) {
circles[i].direction = 3;
} else if ((circles[i].y <= circles[i].r) && circles[i].direction === 3) {
circles[i].direction = 4;
} else if ((circles[i].x < circles[i].r) && circles[i].direction === 4){
circles[i].direction = 1;
} else if ((circles[i].y < circles[i].r) && circles[i].direction === 2) {
circles[i].direction = 1;
}
if (circles[i].direction === 1) {
bottomRight();
} else if (circles[i].direction === 2) {
upRight();
} else if (circles[i].direction === 3) {
upLeft();
} else {
bottomLeft();
}
}
setTimeout(draw, 10);
}
</script>
</head>
<body>
<canvas id="canvas" width="400" height="300"></canvas>
</body>
</html>
如何修复代码?
【问题讨论】:
-
在控制台中的错误旁边,应该有一个文件名和一个行号,可以将您指向确切的错误位置
-
请将函数定义移出循环。
标签: javascript html arrays canvas