Понедельник, 24 Сентября 2018, 10:11

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [312]
Статьи об общих понятиях связанных с созданием игр.
Программирование [69]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [123]
Статьи о программах для создания игр, уроки и описания.
Софт [27]
Различные программы, в том числе в помощь игроделам.
2D-графика [11]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [10]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [91]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [68]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Игры какого типа вы предпочитаете делать?
Всего ответов: 16295
Главная » Статьи » Создание игр

Создание игр на 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 присваиваем заголовок окна(т.е. название окна). Затем в конструкторе пишем такого рода код:
Код

Display.setTitle(CAPTION); //Установка заголовка окна
try{
Display.setDisplayMode(new DisplayMode(WIDTH,HEIGHT)) //Задаем размеры окна
Display.create(); //Создаем окно
}catch(LWJGLException e){
  e.printStackTrace(); //Вывод возникшей ошибки
}


Также импортируем библиотеки 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();  
  }  
  }  
  


На этом всё, удачи и до следующих уроков.
Категория: Создание игр | Добавил: WhoAmI (21 Мая 2015)
Просмотров: 9826 | Комментарии: 6 | Рейтинг: 3.5/4 |
Теги: урок, Создание игр, java, Код, Дисплеи, Eclipse, LWJGL 2, Программирование, ЯП, LWJGL
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Создание игр на Java, используя LWJGL 2. Часть I - Установка. Дисплеи.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 6
+0-
6 vladbogdanov01   (22 Января 2017 12:40)
Неужели сложно написать сразу какие библиотеки надо импортировать, откуда взялся org.lwgl.opengl, если он находиться в файле lwgl-opengl.jar. Можно сразу же написать? Урок хороший, но недоделанный.

+0-
5 komrad2003dima   (30 Декабря 2016 21:32)
Помогите! Вроде бы всё норм, 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

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import static org.lwjgl.opengl.GL11.*;

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();
}
}

+0-
4 last2424   (24 Июня 2015 18:37)
last2424Лол, сначала надо говорить, что импортировать, а потом уже писать код. biggrin
Некоторые классы автоматом и через Ctrl+Shift+O не импортируются.

+0-
2 Gavolot   (24 Мая 2015 08:13)
GavolotПоверь это пригодится, если статей будет действительно цикл.

+0-
3 OmniGamer   (25 Мая 2015 15:07)
будем ждать

+0-
1 Gavolot   (24 Мая 2015 08:13)
GavolotЭто может и не супер круто, своего рода Hello World, но хотя бы имеет смысл. Главное чтобы цикл статей продолжился дальше первой части, копай дальше и старайся. Не стоит откладывать на не определенный срок, даже если местами то что ты напишешь далее будет не профессионально или не правильно.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Lumberyard
  • Visual Studio
  • Greenfoot
  • CopperCube 5
  • Unity
  • WorldSim3D
  • Quake II
  • FIFE
  • Garry's mod
  • BuildBox
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2018 Рейтинг