2011-12-22 53 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