Платформер тормозит после создания вражеского класса - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь построить простой платформер. Изначально у меня были все вражеские методы в основном классе, но я переместил их после того, как базовая игра заработала так, как я хотел. Однако, как только я начал использовать этот класс для хранения своих методов и переменных для врагов, моя игра стала намного медленнее, и FPS значительно упал. Вот мой код для основной игры l oop:

public void run() {
        initialize();
        while (true) {
            move();

            ArrayList tempEnemies = getEnemies();
            for (int i = 0; i < tempEnemies.size(); i++) {
                enemy e = (enemy) tempEnemies.get(i);
                if (e.isVisible())
                    e.enemyUpdate();
                else 
                    tempEnemies.remove(i);
            }
            animation();
            animation(0);
            keepInBound();
            for (int i = 0; i < 3; i++)
                checkCollision(platforms[i]);

            ArrayList attacks = getAttacks();
            for (int i = 0; i < attacks.size(); i++) {
                Attacks p = (Attacks) attacks.get(i);
                if (p.isVisible() == true) {
                    p.update();
                    for (int j = 0; j < enemies.size(); j++)
                        checkCollisionAttacks(p, enemies.get(i));
                } else {
                    attacks.remove(i);
                }
            }

            //levelFinished();
            this.repaint();

            try {
                Thread.sleep(1000 / FPS);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

А вот мой класс врага (прямоугольник - игрок в основном классе):

public class enemy extends test{

    boolean enemyAlive = true, visible;
    int enemyHealth = 4, enemyMaxHealth = 4;
    int[][] spawnPositions = {{180, 420}, {130, 270}, {280, 120}, {500, 30}};
    private int x, y, speedX, height = 30, width = 30;

    public enemy() {
        int rand = (int)Math.random()*4;
        x = spawnPositions[rand][0];
        y = spawnPositions[rand][1];
    }

    public void enemyUpdate() {
        if (rect.x > x) {
            x+=speedX;
            enemyRight = true;
            enemyLeft = false;
        } else {
            x-=speedX;
            enemyRight = false;
            enemyLeft = true;
        }
    }

Кто-нибудь есть идеи, почему это может происходить?

...