Цикл java игры, заставляющий Ubuntu заморозиться

Я делал фронтэнд и веб-программирование бэкэнда больше года теперь, и теперь я пытаюсь изучить 2D игровое программирование в Java. На основе различных источников в сети, а также один от моего друга, который является опытным разработчиком игр, это - типичная установка:

Window.java | класс установки Окна

Game.java | Основной игровой класс

Но когда я пытаюсь работать Game класс, кадр открывается и затем замораживается, единственной вещью, над которой я имею контроль, является моя мышь, ничто иное. Я знаю, что проблема происходит в render метод, потому что прогоны программы, прекрасные, когда тот метод имеет пустое тело.

Я скопировал код точно с учебного руководства, в котором он хорошо работает, и мой друг, который отправил мне почти идентичную версию, которая работает над его компьютером, вызывает то же замораживание для меня. И в учебном руководстве и в тестировании моего друга, операционная система является Windows, который заставляет меня полагать, что это - строго проблема Ubuntu/Linux.

У меня есть процессор Intel i7 3.4gHZ, и 8 концертов RAM, таким образом обрабатывая и памяти не должны быть проблемой здесь. Какие-либо идеи того, что продолжается? Я знаю, что это - больше вопроса о программировании, но то, что проблема, кажется, является определенной для Ubuntu, приводит меня отправлять ее здесь.

Править

Я изолировал проблему к одной строке в Игровом классе: bs.show(). По некоторым причинам замораживается, как только я пытаюсь показать буферную стратегию. Если я создаю буферную стратегию с 1 буфером, она хорошо работает с чем-либо большим, чем 1, замораживается.

Когда заморозило новое время, я открыл виртуальный рабочий стол и работал top, самая странная вещь состоит в том, что Java поднимал меньше чем 2% ЦП и 6% памяти. Это просто не складывает. Я действительно нуждаюсь в некоторой помощи для того, что продолжается здесь, я пошел о том, насколько я могу пойти, и я не хочу вызывать больше перезапуски на своей машине.

1
задан 7 November 2014 в 08:09

2 ответа

У меня та же проблема при запуске вашего кода. Кажется, это проблема производительности. Чтобы исправить это, добавьте System.setProperty("sun.java2d.opengl", "true"); к основному методу в Game.java следующим образом:

 public static void main(String args[]) {
    System.setProperty("sun.java2d.opengl", "true");
    new Game();
 }

Надеюсь, это поможет!

1
ответ дан 11 November 2019 в 09:30

Вы используете сам основной awt-поток. Это должно быть оставлено в покое для угождения Пользовательской Скорости отклика. Читайте немного об использовании SwingUtilities2.invokeLater и SwingUtilities2.invokeAndWait методы для избавлений от этого окна замораживания проблем в Java Приложения Swing.

подход был бы к:

1) Делают Ваш обширный материал в Выполнимом (Вы используете один)

2) В Вашем основном методе, передайте Выполнимый экземпляр одному из вышеупомянутых двух методов в классе

SwingUtilities2, Если Вы хотите пойти далее, можно также рассмотреть использование Рабочих потоков.

1
ответ дан 11 November 2019 в 09:30

Другие вопросы по тегам:

Похожие вопросы: