2014-01-30 46 views
-2

我正在學習畫布,並且我想用這樣的網格製作畫布應用程序。我不知道如何實現這個..任何想法都會很棒。先謝謝你。如何將此菜單集成到HTML5畫布中

grid

+1

開始通過學習繪製四邊形的''做筆記,一旦事情是光柵化到畫布任何菜單鍵,出現不再是一個形狀的上下文,它只是那個點上的像素,因此您需要存儲繪製矩形的位置,並在鼠標單擊位置和碰撞數據結構之間執行「碰撞檢測」。你可以使用Quadtree或者(因爲它不是那麼多形狀)只是蠻力比較每個形狀。當你有一些代碼可以顯示時,請回復。 – zero298

回答

0

這裏是一個開始。

演示:http://jsfiddle.net/m1erickson/Y7m2e/

enter image description hereenter image description hereenter image description here

定義一些 「菜單按鈕」(實際上是矩形),並將其存儲在一個數組:

var rects=[]; 
rects.push({x:10,y:10,width:30,height:15,fillcolor:"red",isFilled:false}); 
rects.push({x:10,y:50,width:50,height:30,fillcolor:"blue",isFilled:false}); 

繪製所有菜單按鈕你已經定義:

function draw(){ 
    ctx.clearRect(0,0,canvas.width,canvas.height); 
    for(var i=0;i<rects.length;i++){ 
     var rect=rects[i]; 
     if(rect.isFilled){ 
      ctx.fillStyle=rect.fillcolor; 
      ctx.fillRect(rect.x,rect.y,rect.width,rect.height); 
      ctx.strokeStyle="black"; 
      ctx.strokeRect(rect.x,rect.y,rect.width,rect.height); 
      ctx.fillStyle="gold"; 
      ctx.fillText("ON",rect.x+5,rect.y+10); 
     }else{ 
      ctx.fillStyle="gray"; 
      ctx.fillRect(rect.x,rect.y,rect.width,rect.height); 
      ctx.strokeStyle="black"; 
      ctx.strokeRect(rect.x,rect.y,rect.width,rect.height); 
      ctx.fillStyle="gold"; 
      ctx.fillText("OFF",rect.x+5,rect.y+10); 
     } 
    } 
} 

監聽鼠標按下事件和切換是被點擊

function handleMouseDown(e){ 
    e.preventDefault(); 
    x=parseInt(e.clientX-offsetX); 
    y=parseInt(e.clientY-offsetY); 

    // Toggle menu "rects" when clicked 
    for(var i=0;i<rects.length;i++){ 
     var rect=rects[i]; 
     if(x>=rect.x && x<=rect.x+rect.width && y>=rect.y && y<=rect.y+rect.height)){ 
      rect.isFilled=!rect.isFilled; 
     } 
    } 
    draw(); 
} 
+0

非常感謝。我將開始研究。如果我有任何疑問,我會更新帖子。 –