2011-12-22 101 views
1

嘿,夥計們在有關函數的另一個問題pushing- Here 然後我得到這個代碼 -功能的繪圖畫布等掛鉤

var postDrawHooks = []; 
var draw = function(){ 
// do stuff 
postDrawHooks.forEach(function(hook){hook()}); 
} 

var playerUpdate = function(){...}; 
postDrawHooks.push(playerUpdate); 

其中非常漂亮的工作,並允許您推送outide功能到另一個一個像你的遊戲循環,而不必爲每個遊戲編輯你的engine.js文件,如果你想添加一個更新到一個對象只是推鉤子。無論如何,我需要一種方式來推動像Context2D.drawImage(等等等等等等)。現在,當我嘗試按下面的這種方式推送時,出現試圖從null繪製的錯誤。

post_draw_render.push(context2D.drawImage(player.tilesheet, player.frameX,player.frameY, 46, 45, player.PosX, player.PosY+1, 46, 45)); 

我甚至不能使用Context2D.drawImage隨時隨地oustide我繪製函數,我不知道爲什麼什麼想法嗎? 引擎 -

//engine vars// 
function init() { 
canvas = document.getElementById('canvas'); 
context2D = canvas.getContext('2d'); 
setInterval(draw, 1000/FPS); 
} 
function draw() { 
post_draw_function.forEach(function(hook){hook()}); 
gameloop(); 
context2D.clearRect(0, 0, canvas.width, canvas.height); 
post_draw_render.forEach(function(hook){hook}); 
//Basic Draw - context2D.drawImage(playerImg, player.PosX, player.PosY); 
//Tilesheet draw - context2D.drawImage(tilesheet, sx, sy, sw, sh, dx, dy, dw, dh); 
context2D.fillStyle = "white"; 
context2D.font = 'bold 25px Times New Roman'; 
} 
+0

我可能是完全錯誤的,但是這聽起來像一個範圍或優先的問題。由於某種原因,Context2D爲空;所以它或者超出了最終鉤子的範圍,它在畫布初始化之前被調用,或者在您正在使用的資源加載之前被調用。 – ceprovence 2011-12-22 19:10:12

回答

2

你是推到陣列中的對象不是一個函數,它是對的drawImage函數調用的返回值。

我想你想

post_draw_render.push(function() { 
    context2D.drawImage(player.tilesheet, player.frameX,player.frameY, 46, 45, player.PosX, player.PosY+1, 46, 45); 
}); 
+0

非常感謝!這正是我所需要的 – 2011-12-22 21:20:18