Мне удалось запустить приложение с некоторыми изменениями и исправлением ошибок.Это не законченное решение, а то, что поможет вам двигаться вперед.
Сверху
Я изменил значения задержек, это сделало игру доступной, поскольку кажется, что 100 - это слишком короткое время.Вам, вероятно, не понравятся мои ценности для играбельности, но с моими ценностями игра может быть проверена, по крайней мере.
long delay = 1000;
long delay2 = 3000;
Нет смысла иметь два ScheduledExecutorService
объекта, поэтому удалите второй.
Я понятия не имею, почему вы хотите создать поток, запустите ваш код оттуда, поэтому я удалил его,
//thread = new Thread(this, "thread");
running = true;
//thread.start();
И вручную вызывается метод run()
в конце start()
, так что с этим и единственным исполнителем вторая половина start()
будет
executor.scheduleAtFixedRate(task, delay, delay,
TimeUnit.MILLISECONDS); // moveing
executor.scheduleAtFixedRate(task2, delay2, delay2,
TimeUnit.MILLISECONDS); // spawning new enemies
System.out.println("Game started, window width: " + getWidth() + ", height: " + getHeight());
run();
}
Выповсюду с вашими циклами for, в одном месте у вас есть i < 6
для лимита, а в другом - i == 5
(что всегда будет ложным).Пройдите все циклы и убедитесь, что они определены как
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 790; j++) {
. Также правильно вызовите randInt, чтобы соответствовать размеру массива
int trakk = randInt(0, 4);
Игра все еще ведет себя очень странно, но большую часть времени ядостаньте красных врагов, и я смогу их застрелить.
Обновление
Я сыграл с ним еще и внес еще два изменения.
Ваш метод генератора случайных чисел создает новый объект Random каждый раз, когда он вызывается, что не нужно, и я не видел смысла в методе randInt
, поэтому я удаляю метод и объявляю новый член сверху
Random rand = new Random();
и затем использовал его там, где раньше был вызов randInt
:
int trakk = rand.nextInt(NUMBER_OF_ROWS);
Чтобы посмотреть, смогу ли я улучшить производительность, я ввел 3 константы, а затем использовал их для массива и циклов for.(заменяя все вхождения 5 и 790 на них)
private static final int NUMBER_OF_ROWS = 5;
private static final int NUMBER_OF_PIXELS = 790;
private static final int LAST_PIXEL = NUMBER_OF_PIXELS - 1;
Затем я сделал массив намного меньше, изменив два первых на 3 и 100, это снова сделало игру намного более играбельной (хотя она и испортилась)немного графики) облегчает тестирование и исправление ошибок.