这是我的代码,它比看起来更简单。我只是使用很多变量来初始化我的地图的第一个平方。之后,我试着制作另一幅地图,尺寸正确,看起来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 }
你介意简化这一点,只留下那些实际上会导致你问题的代码吗?也许创建一个'jsFiddle'来重现它。 – melancia
最后一个for循环似乎导致问题,这是它通过我正在打印的坐标循环。我可以尝试一下小提琴。 – helpmeplease
是的,它会让我们更容易帮助你。如果你去调试一下,你会发现问题实际发生的地方。 – melancia