В основном я сосредоточился на аспектах Graphics, чтобы создать немного 2DGame. Я смотрел/смотрел несколько учебников, но ни один из них не нравился. У меня уже есть игрок (квадрат), который перемещается и сталкивается с другими квадратами на экране. Гравитация и т.д. Также выполняются.
Если на экране есть только много объектов (30 * 20), все работает отлично. Но если я увеличу его, чтобы сказать 300 * 300, программа начнет работать очень медленно, так как она должна проверять столько объектов.
Я действительно не понимаю, как игры, такие как Minecraft, могут работать со всеми блоками ALL THOSE, и моя программа уже отдает 300 * 300 блоков.
Я уже пытался проверять только на наличие коллизий, когда объекты видны, но это приводит к тому, что программа проверяет каждый объект на предмет видимости, приводя к той же проблеме. Что я делаю не так? Помогите оценить.
Я отправлю код о том, как я обрабатываю столкновений.
player.collision(player, wall);
public void collision(Tile object1, Tile[] object2){
collisionCheckUp(object1, object2);
collisionCheckDown(object1, object2);
collisionCheckLeft(object1, object2);
collisionCheckRight(object1, object2);
}
public void collisionCheckDown(Tile object1, Tile[] object2){
for (int i = 0; i < Map.tileAmount; i++){
if(object2[i] != null && object2[i].visible)
{
if(object1.isCollidingDown(object2[i])){
object1.collisionDown = true;
return;
}
}
}
object1.collisionDown = false;
}
public void compileHullDown(){
collisionHull = new Rectangle((int)x+3, (int)y+3, width-6, height);
}
int wallCount = 0;
for (int x=0;x<Map.WIDTH;x++) {
for (int y=0;y<Map.HEIGHT;y++) {
if (Map.data[x][y] == Map.BLOCKED) {
wall[wallCount] = new Tile(x * Map.TILE_SIZE, y * Map.TILE_SIZE);
wallCount++;
}
}
}