2014-12-18 58 views
-1

這是我的代碼,它比看起來更簡單。我只是使用很多變量來初始化我的地圖的第一個平方。之後,我試着製作另一幅地圖,尺寸正確,看起來X的表現就像是Y.我的意思是,我認爲應該創造一條垂直線,但它創造的是一個水平的,而且這對我來說是相當令人費解的,我在代碼中沒有看到任何錯誤,並且我正在打印這些座標,他們似乎沒有問題。X爲什麼表現得像Y?

var addRooms = function(map, mapSize, roomz) { 
      var firstX = 20 - (Math.floor(Math.random()*3)+5); 
      var firstY = 20 - (Math.floor(Math.random()*3)+5); 
      var firstEndX = 20 + (Math.floor(Math.random()*3)+5); 
      var firstEndY = 20 + (Math.floor(Math.random()*3)+5); 
      var startX = 0; 
      var startY = 0; 
      var endX = 0; 
      var endY = 0; 
      var rooms = []; 
      var canAdd = false; 
      var lastRoom = {}; 

     for(var i = 0; i < roomz; i++) { 
      canAdd = false; 
      startX = lastRoom.midX - (Math.floor(Math.random() * 2) + 1); 
      endX = startX + Math.floor((Math.random() * 2) + 2); 
      startY = lastRoom.endY; 
      endY = startY + Math.floor((Math.random() * 10) + 5); 
      if(endY > mapSize) 
       endY = mapSize; 
      if(endX > mapSize) 
       endX = mapSize; 

      var roomWidth = endX - startX; 
      var roomHeight = endY - startY; 
      var firstroomWidth = firstEndX - firstX; 
      var firstroomHeight = firstEndY - firstY; 
      var midX = (startX + Math.floor(roomWidth/2)); 
      var midY = (startY + Math.floor(roomHeight/2)); 
      var firstmidX = (firstX + Math.floor(firstroomWidth/2)); 
      var firstmidY = (firstY + Math.floor(firstroomHeight/2)); 
      //var rooms = []; 
      var firstRoom = { startX: firstX, startY: firstY, endX: firstEndX, endY: firstEndY, midX: firstmidX, midY: firstmidY }; 

      var newRoom = { startX: startX, startY: startY, endX: endX, endY: endY, midX: midX, midY: midY }; 


       if(!rooms[0]) { 
        canAdd = true; 
        newRoom = firstRoom; 
        lastRoom = firstRoom; 
       } 
       if(!canAdd) { 
        for(var key in rooms) { 
         if(!checkIntersect(newRoom, key)) { 
          canAdd = true; 
          lastRoom = newRoom; 
         } 
        } 
       } 
       if(canAdd) { 
        console.log(newRoom) 
        rooms.push(newRoom); 
       } 
     } 

     for(var key in rooms) { 


       for (var y = rooms[key].startY; y < rooms[key].endY; y++) { 
        for (var x = rooms[key].startX; x < rooms[key].endX; x++) { 
        if(typeof map[x][y] !== "undefined") { 
        map[x][y] = 0; 
        } 
       } 
      } 
     } 
    }; 

正如你可以用這些座標版畫應該是建立一個垂直方看:

{ startX: 14, startY: 14, endX: 27, endY: 26, midX: 20, midY: 20 } 
{ startX: 19, startY: 26, endX: 22, endY: 39, midX: 20, midY: 32 } 
{ startX: 18, startY: 39, endX: 21, endY: 52, midX: 19, midY: 45 } 
{ startX: 17, startY: 52, endX: 19, endY: 58, midX: 18, midY: 55 } 
{ startX: 17, startY: 58, endX: 20, endY: 66, midX: 18, midY: 62 } 
+2

你介意簡化這一點,只留下那些實際上會導致你問題的代碼嗎?也許創建一個'jsFiddle'來重現它。 – melancia

+0

最後一個for循環似乎導致問題,這是它通過我正在打印的座標循環。我可以嘗試一下小提琴。 – helpmeplease

+0

是的,它會讓我們更容易幫助你。如果你去調試一下,你會發現問題實際發生的地方。 – melancia

回答

1

你不應該查詢

map[x][y]; 

像這樣呢?

map[y][x]; 
+0

天才..那是我的問題!我已經過去了一段時間,完全滑過我,謝謝! – helpmeplease

+0

我的實際問題是在[x] [y] = [y] [x]這個位置執行此操作,但是您的答案仍然幫助我理清了這一點 – helpmeplease

相關問題