Итак, я нахожусь в процессе создания 2D нисходящей игры на основе плиток в Gamemaker: Studio 1.4.Вот текущий сценарий для мирового поколения:
//Generate Center Points
var centerPointCount = 500;
var centerPoint;
var centerPointX;
var centerPointY;
for (var p = 0; p < centerPointCount; p++){
switch (irandom(3)){
case 0: centerPoint[p] = 0; //Grass
break;
case 1: centerPoint[p] = 0; //Grass
break;
case 2: centerPoint[p] = 0; //Grass
break;
case 3: centerPoint[p] = 1; //Water
break;
default: centerPoint[p] = 0;
break;
}
centerPointX[p] = irandom(499);
centerPointY[p] = irandom(499);
}
//Set Tiles Based On Center Points
var tiles;
for (var c = 0; c < 500; c++){
for (var r = 0; r < 500; r++){
var centerPointDistance = 1000000000;
var centerPointType;
for (var p = 0; p < centerPointCount; p++){ //Find Closest Center Point
var distancePrime = sqr(c - centerPointX[p]) + sqr(r - centerPointY[p]);
if (distancePrime < centerPointDistance){
centerPointType = centerPoint[p];
centerPointDistance = distancePrime;
}
}
tiles[c, r] = centerPointType; //Set Tile To Center Point Type
}
}
//Generate Objects (Trees, Rocks, Etc.)
var objects;
for (var c = 0; c < 500; c++){
for (var r = 0; r < 500; r++){
switch (tiles[c, r]){ //Tile Object Is On
case 0: //Grass
if (random(1) <= 0.10){
objects[c, r] = 0; //Tree
} else{
objects[c, r] = -1;
}
break;
case 1: //Water
objects[c, r] = -1;
break;
default:
objects[c, r] = -1;
break;
}
}
}
//Return The World Generated
var world;
world[0] = tiles;
world[1] = objects;
return world;
Выполнение этого кода на процессоре Ryzen 1300x занимает у меня ~ 2 минуты, поэтому мне действительно нужна помощь в его оптимизации, так как я планирую также расширить его., что займет еще больше времени.