2014-01-12 4 views
0

Моя общая цель - сделать раздвижную игру-головоломку. Используя холст, мне удалось разделить изображение на несколько частей. Чтобы перетасовать кусочки, я написал координаты фигур в массив, перетасовал координаты и снова нарисовал изображение на холсте. Тем не менее, головоломка заканчивается дублированием частей! Я не имею понятия почему?!HTML5 холст разбить изображение

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); 

} 

Если это помогает, я использую JS Bin на Firefox. Благодарю.

ответ

0

Вам нужно очистить холст для каждого перерисовки, иначе останется прежний контент.

Попробуйте это:

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); 
    ... 
Смежные вопросы