功能挂钩绘图到画布等

时间:2011-12-22 18:47:35

标签: javascript html5 function canvas

嘿伙计们关于推动功能的另一个问题 - Here 然后给了我这段代码 -

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

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

哪个非常好用,并且允许你将一个outide函数推送到另一个函数中,就像你的游戏循环一样,如果你想为一个对象添加一个更新而不必为每个游戏编辑你的engine.js文件。无论如何我需要一种像Context2D.drawImage(blah blah blah)推送绘图的方法;现在,当我尝试按上面这样推动时,我得到错误,试图从null中绘制。

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

我甚至无法在我绘制函数的任何地方使用Context2D.drawImage,我不知道为什么有任何想法? 引擎 -

//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';
}

1 个答案:

答案 0 :(得分:2)

您要推入数组的对象不是函数,它是对drawImage函数的调用的返回值。

我想你想要

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