2012-01-13 77 views
0

我有一个问题,我无法找到解决方案。我有一张我想在画布上多次绘制的图像。为此,我为每个我想绘制该图像的地方都有一个阵列。无法在画布上绘制相同图像的多个副本?

但是,JavaScript似乎应该画出一些东西使旧图像消失?为什么?

这里是使烦恼代码:

function drawPoints() { 
var map = getMapArray(); 
var counter = 0; 
for(var i = 1; i <= map.length; i++) { 
    for(var j = 1; j <= entry.length; j++) { 
     counter++; 
     for(var q = 0; q < points.length; q++) { 
      if(counter == points[q] && points[q] != 0) { 
       var point = new Image(); 
       point.src="./img/point.png"; 
       point.addEventListener("load", function(){canvas.drawImage(point, (j-1)*40, (i-1)*40)}, false); 
      } 
     } 
    } 
} 
} 

逻辑完美的作品,并通过它循环,因为它应该。 它是eventlistener中的drawimage函数,它不会像我希望的那样打印图像。否则我不知道该怎么做?

如果你们有更好的解决方案比调用一个eventlistener所有的时间,请分享你的knowlegde。谢谢你的建议。

顺便说一句,正如我前面所说:功能运行正常,但一切都只是白色,可能是因为它删除旧的图像为新的和间隔太短,我看不到任何行动。

链接到现场脚本: http://picturds.com/pacman_serious/

+0

直接绘制图像通过删除函数的声明来解决。 – Ms01 2012-01-13 02:47:46

回答

3

而是每次绘制时间的图像上听的,你可能想:

  1. 存放在三个全局变量的图像(吃豆子,鬼,点)
  2. 开始加载阶段,您加载所有图片
  3. 一旦图像加载,开始你的游戏计时器
  4. 在游戏循环中,使用canvas.drawImage()
+0

好的,谢谢我会尽力:) – Ms01 2012-01-13 02:40:41

+0

我删除了函数,只是写了canvas.drawimage,它的工作完美。 :D – Ms01 2012-01-13 02:48:16

+0

即使它正在工作,添加创建和图像对象并为每次要绘制图像添加事件侦听器,仍然会更有效率,因为在此答案中,创建一个图像处理并使用该处理每次你画你的形象。 – hobberwickey 2012-01-13 05:58:30