【问题标题】:HTML5 canvas break up imageHTML5 画布分解图像
【发布时间】:2014-01-31 12:45:06
【问题描述】:

我的总体目标是制作一款滑动拼图游戏。使用画布,我设法将图像分成多个部分。为了打乱棋子,我把棋子的坐标写成一个数组,打乱坐标,然后在画布上重新绘制图像。然而,这个谜题最终会出现一些重复的部分!我不知道为什么?!

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById("map");




//img,sx,sy,swidth,sheight,x,y,width,height


function recreate_map(){

ctx.drawImage(img,0,0,133,100,0,0,133,100);
ctx.drawImage(img,133,0,133,100,133,0,133,100);
ctx.drawImage(img,266,0,133,100,266,0,133,100);

ctx.drawImage(img,0,100,133,100,0,100,133,100);
ctx.drawImage(img,133,100,133,100,133,100,133,100);
ctx.drawImage(img,266,100,133,100,266,100,133,100);

ctx.drawImage(img,0,200,133,100,0,200,133,100);
ctx.drawImage(img,133,200,133,100,133,200,133,100);
ctx.drawImage(img,266,200,133,100,266,200,133,100);
}


 function shuffle_array(arr){  
  var i = arr.length;

  while(--i>0){
    var n = Math.floor(Math.random()*(i));
    var temp = arr[n];
    arr[n] = arr[i];
    arr[i] = temp;
  } 

  return arr;
}



function shuffle_tiles(){
  var positions_x = [0,133,266,0,133,266,0,133,266];
  var positions_y = [0,0,0,100,100,100,200,200,200];

  shuffle_array(positions_x);
  shuffle_array(positions_y);



ctx.drawImage(img,0,0,133,100,positions_x[0],positions_y[0],133,100);
ctx.drawImage(img,133,0,133,100,positions_x[1],positions_y[1],133,100);
ctx.drawImage(img,266,0,133,100,positions_x[2],positions_y[2],133,100);
ctx.drawImage(img,0,100,133,100,positions_x[3],positions_y[3],133,100);
ctx.drawImage(img,133,100,133,100,positions_x[4],positions_y[4],133,100);
ctx.drawImage(img,266,100,133,100,positions_x[5],positions_y[5],133,100);
ctx.drawImage(img,0,200,133,100,positions_x[6],positions_y[6],133,100);
ctx.drawImage(img,133,200,133,100,positions_x[7],positions_y[7],133,100);
ctx.drawImage(img,266,200,133,100,positions_x[8],positions_y[8],133,100);  

}

如果有帮助,我在 Firefox 上使用 JS Bin。谢谢。

【问题讨论】:

    标签: javascript html image canvas drawimage


    【解决方案1】:

    每次重绘都需要清除画布,否则之前的内容会保留。

    试试这个:

    function recreate_map(){
    
        /// call this first
        ctx.clearRect(0, 0, c.width, c.height);
    
        ctx.drawImage(img,0,0,133,100,0,0,133,100);
        ...
    

    【讨论】:

      猜你喜欢
      • 2013-02-20
      • 2014-10-03
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2013-12-09
      • 2012-04-05
      相关资源
      最近更新 更多