我有2個函數,第一個函數繪製一個內襯的空網格(28x16),第二個函數繪製一個方框,用一種顏色填充選定的網格位置,每個方框爲25X25 。第二個函數允許我使用網格位置在畫布中的任意位置繪製一個框。因此,繪製一個盒子,我創建了另一個調用網格位置並在那裏繪製的函數,例如在x = 5和y = 4的網格位置繪製一個盒子,必須輸入此行。drawWalls(5,4);
此行可以再次使用並再次繪製不同的框,所以我可以繪製框和功能完美的工作,現在我想同時創建超過1個方框(例如一行框),問題是,我從來沒有創建一個像這樣的循環或者一個有多於一個變量的循環,請大家幫忙,我也對數組感到困惑,我想知道這些數組是否存儲在一個數組中,我怎樣才能再次調用它們,比如說我點擊一個框,它會被刪除,這並不重要,但如果您對第一個問題有任何想法,請幫助,感謝您的時間。使用網格中的座標繪製2D對象JavaScript
繪製網格
function drawGrid() {
ctxBg.beginPath();
for (var i = 0; i <= canvasWidth-25; i+= 25) {
ctxBg.moveTo(-25 + i,55);
ctxBg.lineTo(-25 + i, canvasHeight - 55);
}
for (var i = 25; i <= canvasHeight -75; i+= 25) {
ctxBg.moveTo(55,25 + i);
ctxBg.lineTo(canvasWidth-55, 25 + i);
}
ctxBg.stroke();
}
function ClearBg() {
ctxBg.clearRect(0,0,canvasWidth,canvasHeight);
}
繪製
function Wall(row, col) {
this.row = row;
this.col = col;
this.color = "#000";
this.width = 25
this.height = 25
this.leftX = this.row;
this.rightX = this.row + this.width;
this.topY = this.col;
this.bottomY = this.col + this.height;
}
function drawWalls(x,y) {
walls.push(new Wall(x, y));
for (var b = 0; b < walls.length; b++) {
ctxWall.fillStyle = walls[b].color;
ctxWall.fillRect(walls[b].row * gridSize, walls[b].col * gridSize, walls[b].width, walls[b].height);
}
}
function createWalls() {
drawWalls(9,9);
drawWalls(8,8);
drawWalls(7,7);
}
我試圖使功能createWalls在循環中繪製它們放在一起,不幸的是我還沒有創建的鼠標點擊在牆上事件,但我會很快
顯示您的實際代碼。 – alex
您應該顯示一些現有的代碼。關於單擊框,畫布不支持繪製任何東西上的事件,唯一的方法是存儲可點擊對象的邊界,捕獲畫布上的點擊,並遍歷所有邊界,直到找到其中一個邊界爲止。 SVG可以將每個形狀保持爲一個對象並響應事件。 –
我會看看SVG,謝謝 – Dalomo