Uncaught TypeError: Cannot read property 'draw' of undefined
1.
來源自慕課網Daisy 的課程《canvas實現星星閃爍特效》,相關問題下面有我的回答
部分js指令碼如下
function init() {
can = document.getElementById("canvas");
ctx = can.getContext("2d");
w = can.width;
h = can.height;
girlPic.src = "src/girl.jpg";
starPic.src = "src/star.png";
gameLoop();
for (var i = 0; i < num; i++) {
stars[i] = new starObj();
stars[i].init1();
}
}
function gameLoop() {
window.requestAnimFrame(gameLoop);
drawStars();
}
function drawStars(){
for(var i=0;i<num;i++){
stars[i].draw();
}
}
紅色字型部分gameLoop()要放於for迴圈之後,放在前面就會提示Uncaught TypeError: Cannot read property 'draw' of undefined,因為陣列中的值要先初始化為starObj物件,才可以引用starObj物件的方法,即stars[i].draw();
2.
迴圈呼叫函式的三種方法以及區別:
requestAnimFram(function(){}); 依據電腦效能,來確定每次回撥的時間,提高效率,回撥時間可能不一樣
setTimeOut(function(){},time); 在定義的time時間之後,迴圈呼叫函式
setInterval(function(){},time); 先呼叫函式,在time時間之後第二次再呼叫
如果對你有用的話,給個讚唄~