Обнаружение столкновений с МНОГИМИ объектами

Я в основном сосредоточился на аспектах графики, чтобы создать небольшую 2D-игру. Я просмотрел / просмотрел несколько руководств, но ни одно из них не было таким приятным. У меня уже есть игрок (квадрат), который движется и сталкивается с другими квадратами на экране. Гравитация и т. Д. Тоже делаются.

Если на экране отображается ровно столько объектов (30 * 20), все работает отлично. Но если я увеличу его, скажем, до 300 * 300, программа начнет работать очень медленно, так как ей придется проверять так много объектов.

Я действительно не понимаю, как игры вроде Minecraft могут работать со ВСЕМИ ЭТИМИ блоками, а моя программа уже отказывается от 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++;
            }
        }
    }
16
задан Peter O. 17 April 2013 в 18:32
поделиться