1
私は蛇のゲームのチュートリアルに従っています。私は 'paint()'関数for-loopの中に何が起こるかを見るために 'snake_array.pop()'を入れました。なぜなら、私はなぜ次のエラーが出るのか理解しようとしています:JQuery forループと配列 - なぜこの変数は未定義ですか?
"Uncaught TypeError:定義されていないプロパティ 'x'を読み取れません。
「x」が定義されていない理由はありません。 forループの最後の繰り返しはc = snake_array [2]、snake_array [2]は{x:2、y:2}です。では、なぜxが定義されていないと言っているのですか?
$(document).ready(function(){
var canvas = $("#canvas")[0];
var ctx = canvas.getContext("2d");
var w = $("#canvas").width();
var h = $("#canvas").height();
ctx.fillStyle = "white";
ctx.fillRect(0, 0, w, h);
ctx.strokStyle = "black";
var snake_array;
create_snake();
function create_snake()
{
var length = 5;
snake_array = [];
for(var i = length - 1;i>=0;i--)
{
snake_array.push({x:i,y:2});
}
}
function paint()
{
for(var i=0; i < snake_array.length; i++)
{
var tail = snake_array.pop();
\t \t \t var c = snake_array[i];
\t \t \t ctx.fillStyle = "blue";
\t \t \t ctx.fillRect(c.x*10, c.y*10, 10, 10);
\t \t \t ctx.strokeStyle = "white";
\t \t \t ctx.strokeRect(c.x*10, c.y*10, 10, 10);
}
}
paint();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="canvas" width="450" height="450"></canvas>
私が指摘しておきたいことは、可変テールを使用しないことです。 – hairmot
xとyはどこで変数として定義されていますか?あなたはwとhを意味しますか? – Jeff
'snake_array.pop()'は配列の最後の要素を削除します。配列の長さが最初に1である場合は、1つの要素を削除し、配列[0]を取得しようとした後に削除します。しかし、array [0]は未定義です。 'var tail = snake_array.pop();'という行を削除するだけです。 – Fefux