Я делал фронтэнд и веб-программирование бэкэнда больше года теперь, и теперь я пытаюсь изучить 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% памяти. Это просто не складывает. Я действительно нуждаюсь в некоторой помощи для того, что продолжается здесь, я пошел о том, насколько я могу пойти, и я не хочу вызывать больше перезапуски на своей машине.
У меня та же проблема при запуске вашего кода. Кажется, это проблема производительности. Чтобы исправить это, добавьте System.setProperty("sun.java2d.opengl", "true");
к основному методу в Game.java следующим образом:
public static void main(String args[]) {
System.setProperty("sun.java2d.opengl", "true");
new Game();
}
Надеюсь, это поможет!
Вы используете сам основной awt-поток. Это должно быть оставлено в покое для угождения Пользовательской Скорости отклика. Читайте немного об использовании SwingUtilities2.invokeLater
и SwingUtilities2.invokeAndWait
методы для избавлений от этого окна замораживания проблем в Java Приложения Swing.
подход был бы к:
1) Делают Ваш обширный материал в Выполнимом (Вы используете один)
2) В Вашем основном методе, передайте Выполнимый экземпляр одному из вышеупомянутых двух методов в классе
SwingUtilities2, Если Вы хотите пойти далее, можно также рассмотреть использование Рабочих потоков.