Создание игр на Java, используя LWJGL 2. Часть I - Установка. Дисплеи.
[Следующая часть] ---- Здравствуйте, сегодня бы я хотел начать свою серию уроков по такой замечательной библиотеке, как LWJGL. Сразу скажу что туториал рассчитан на пользователей, которые уже знакомы с Java и знают ее хотя бы на минимальном уровне. Также хочу отметить, что на протяжении всей серии уроков я буду использовать среду Eclipse LUNA. Итак, начнём. 1. Установка LWJGL(Только для Eclipse!) В начале, вам нужно скачать LWJGL с этого сайта. Затем распакуйте скачанный архив в удобном для вас месте. Теперь запустите Eclipse. Создайте новый проект, и вместо Finish нажмите Next как показано на рисунке.
Выберите вкладку Libaries, и нажмите Add External Libaries.
Затем, в распакованном архиве найдите папку jars. Откройте ее и выберите файл lwjgl.jar. Выбрав этот файл, нажмите OK.
Теперь, когда вы выбрали его, найдите его в списке и разверните, нажав на треугольник слева от его названия.
Затем выберите Native Libary Location. Выберите Edit и затем, в открывшемся диалоговом окне External Folder.
Найдите в распакованном архиве папку native. Разверните ее и найдите там папку с названием вашей операционной системы. Выберите ее и нажмите ОК. Затем нажмите еще раз ОК и Finish. LWJGL установлен.
2. Первая программа. Теперь, давайте создадим основной класс и назовём его Main. Пусть он будет нашей точкой входа(соответственно в нём должен быть статический метод main(String[] args)). Теперь объявим конструктор. Затем в главном методе вызовем конструктор. Получится что-то типа того:
Код
public class Main{ public Main(){
}
public static void main(String[] args){ new Main(); } }
После этого создадим константы WIDTH и HEIGHT типа int, и CAPTION типа String. WIDTH и HEIGHT присваиваем размеры окна, а CAPTION присваиваем заголовок окна(т.е. название окна). Затем в конструкторе пишем такого рода код:
Также импортируем библиотеки org.lwjgl.* и org.lwjgl.opengl.*. Теперь давайте разберём код. Здесь часто встречается класс Display. Класс Display - абстрактный класс, предназначенный для работы с окном. Первая строчка - установка заголовка окна(используя метод Display.setTitle(String title)). Затем идет try/catch. В блоке try мы видим метод Display.setDisplayMode, который в качестве аргумента принимает экземпляр класса DisplayMode. Конструктор DisplayMode принимает два аргумента: ширина и высота создаваемого окна. Затем мы вызываем метод Display.create(), который окончательно создает окно. Далее идет блок catch, который ловит исключение LWJGL, которое может произойти при Display.setDisplayMode(...). Получается следующего рода картина:
Код
public class Main{ public const int WIDTH,HEIGHT; public const String CAPTION; public Main(){ Display.setTitle(CAPTION); //Установка заголовка окна try{ Display.setDisplayMode(new DisplayMode(WIDTH,HEIGHT)) //Задаем размеры окна Display.create(); //Создаем окно }catch(LWJGLException e){ e.printStackTrace(); //Вывод возникшей ошибки в консоль System.exit(0); //Остановка программы } } public static void main(String[] args){ new Main(); } }
Запустив эту программу, у нас появится окно, но оно тут-же вылетит. Это нормально. Для того, чтобы удержать окно, мы должны организовать главный игровой цикл. Выглядит он примерно следующим образом:
Код
while(!Display.isCloseRequested()){ //Пока не поступил запрос о закрытии окна glClear(GL_COLOR_BUFFER_BIT); //Очистка буфера который выводится на экран.(проще говоря просто очистка экрана) Display.update(); //Обновляем дисплей Display.sync(60); //Синхронизируем FPS до 60. } Display.destroy(); //После того как вышли из цикла, уничтожаем дисплей... System.exit(0); //...и закрываем программу
Кстати, для работы функции glClear придется статически импортировать библиотеку org.lwjgl.opengl.GL11.*. Делается это следующим образом:
Код
import static org.lwjgl.opengl.GL11.*;
Собственно теперь, написав этот игровой цикл после блока try/catch, программа не будет вылетать и будет закрываться только при нажатии на крестик.
В конце концов выходит такая вот программа:
Код
public class Main{ public const int WIDTH,HEIGHT; public const String CAPTION; public Main(){ Display.setTitle(CAPTION); //Установка заголовка окна try{ Display.setDisplayMode(new DisplayMode(WIDTH,HEIGHT)) //Задаем размеры окна Display.create(); //Создаем окно }catch(LWJGLException e){ e.printStackTrace(); //Вывод возникшей ошибки в консоль System.exit(0); //Остановка программы } while(!Display.isCloseRequested()){ //Пока не поступил запрос о закрытии окна glClear(GL_COLOR_BUFFER_BIT); //Очистка буфера который выводится на экран.(проще говоря просто очистка экрана) Display.update(); //Обновляем дисплей Display.sync(60); //Синхронизируем FPS до 60. } Display.destroy(); //После того как вышли из цикла, уничтожаем дисплей... System.exit(0); //...и закрываем программу } public static void main(String[] args){ new Main(); } }
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Создание игр на Java, используя LWJGL 2. Часть I - Установка. Дисплеи.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
Неужели сложно написать сразу какие библиотеки надо импортировать, откуда взялся org.lwgl.opengl, если он находиться в файле lwgl-opengl.jar. Можно сразу же написать? Урок хороший, но недоделанный.
Помогите! Вроде бы всё норм, const заменил на final и всё вроде бы прекрасно но тут -} Display.setDisplayMode(new DisplayMode(WIDTH,HEIGHT)) в конце ошибка, не хватает точки с зап. - ; (мне так пишет eclipse - Syntax error, insert ";" to complete BlockStatements) ставлю точк. с зап. и тут другие ошибки: на 9 строке где public Main(){ Multiple markers at this line - The blank final field HEIGHT may not have been initialized - The blank final field WIDTH may not have been initialized - The blank final field CAPTION may not have been initialized на 10 строке где Display.setTitle(CAPTION); The blank final field CAPTION may not have been initialized
и на 12 строке где Display.setDisplayMode(new DisplayMode(WIDTH,HEIGHT)); Multiple markers at this line - The blank final field WIDTH may not have been initialized - Syntax error, insert ";" to complete BlockStatements - The blank final field HEIGHT may not have been initialized
public class Main{ public final int WIDTH,HEIGHT; public final String CAPTION; public Main(){ Display.setTitle(CAPTION); //Установка заголовка окна try{ Display.setDisplayMode(new DisplayMode(WIDTH,HEIGHT)); //Задаем размеры окна Display.create(); //Создаем окно }catch(LWJGLException e){ e.printStackTrace(); //Вывод возникшей ошибки в консоль System.exit(0); //Остановка программы } while(!Display.isCloseRequested()){ //Пока не поступил запрос о закрытии окна glClear(GL_COLOR_BUFFER_BIT); //Очистка буфера который выводится на экран.(проще говоря просто очистка экрана) Display.update(); //Обновляем дисплей Display.sync(60); //Синхронизируем FPS до 60. } Display.destroy(); //После того как вышли из цикла, уничтожаем дисплей... System.exit(0); //...и закрываем программу } public static void main(String[] args){ new Main(); } }
Это может и не супер круто, своего рода Hello World, но хотя бы имеет смысл. Главное чтобы цикл статей продолжился дальше первой части, копай дальше и старайся. Не стоит откладывать на не определенный срок, даже если местами то что ты напишешь далее будет не профессионально или не правильно.
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]