キャンバスの周りでボールをバウンドさせることになっている HTML が少しありますが、座標を格納する配列をランダムな位置に設定して でテストすると、「NaN」のように見えますalert("Co-ordinates " + (cirX[i]) + " x " + (cirY[i]));
。これは、「座標 NaN x NaN」を返します。私はアレイなしで1つのボールでそれをやろうとしましたが、うまくいきました。配列のコーディングが悪いのか、それとも別のものなのかはわかりません。ここに私のHTMLがあります:
<!Doctype HTML>
<head>
<script>
var cirX = [];
var cirY = [];
var chX = [];
var chY = [];
var width;
var height;
function initCircle(nBalls) {
alert(nBalls)
for(var i = 0; i<nBalls;i++) {
alert("loop " + i)
chX[i] = (Math.floor(Math.random()*200)/10);
chY[i] = (Math.floor(Math.random()*200)/10);
cirX[i] = Math.floor(Math.random()*width);
cirY[i] = Math.floor(Math.random()*height);
alert("Co-ordinates " + (cirX[i]) + " x " + (cirY[i]));
circle(cirX[i],cirY[i],3);
setInterval('moveBall(i)',10);
}
}
function moveBall(ballNum) {
if(cirX[ballNum] > width||cirX[ballNum] < 0) {
chX[ballNum] = 0-chX[ballNum];
}
if(cirY[ballNum] > height|| cirY[ballNum] < 0) {
chY[ballNum] = 0-chY[ballNum];
}
cirX[ballNum] = cirX[ballNum] + chX[ballNum];
cirY[ballNum] = cirY[ballNum] + chY[ballNum];
circle(cirX[ballNum],cirY[ballNum],3);
}
function circle(x,y,r) {
var c=document.getElementById("canvas");
var ctx=c.getContext("2d");
canvas.width = canvas.width;
ctx.fillStyle="#FF0000";
ctx.beginPath();
ctx.arc(x, y, r, 0, Math.PI*2, true);
ctx.fill();
width = canvas.width;
height = canvas.height;
}
</script>
</head>
<body>
<canvas id="canvas" width="400" height="300">
</canvas>
<script>
initCircle(3); //this sets the number of circles
</script>
</body>
配列などを初期化する方法を調べましたが、正しくやっているようですか? よろしくお願いします。
編集:
上記の問題を修正したにもかかわらず、変数ballNum
がmoveBall()
予想どおり 0 から 2 まで変化するにもかかわらず、1 つのボールだけがさまざまな速度で移動します ( を追加してテストalert(ballNum)
)。誰かが理由を知っていますか?