Понедельник, 20 Августа 2018, 19:51

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

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

Уроки по LWJGL. Часть III. Обработка событий. Сущности
Прежде всего, хотелось бы начать с того, что существует два типа обработки событий с клавиатуры.
Один из них - просто проверка на нажатие клавиши. Выглядит это следующим образом:
Код

  if(Keyboard.isKeyDown(Keyboard.НАЗВАНИЕ_КЛАВИШИ)){
  //Ваши действия.  
  }
  
.
Статический метод isKeyDown, возвращает true если клавиша указанная клавиша была нажата, в противном случае он возвращает false.

Также можно реализовать проверку клавиш следующим образом:
Код

  while(Keyboard.next()) //Грубо говоря Keyboard.next() возвращает true, если поступает любого рода запрос с клавиатуры.
  {
  if(Keyboard.isKeyDown(Keyboard.НАЗВАНИЕ_КЛАВИШИ)){
  //Ваши действия.  
  }  
  }  
  
.


Таким-же образом мы можем обрабатывать события мышки:
Код

  if(Mouse.isButtonDown(Mouse.КНОПКА_МЫШИ))}
  //Ваши действия  
  }
  
.

Теперь рассмотрим как это можно реализовать на практике.
Вернемся к нашему главному классу, в котором реализован основной игровой цикл.


Обрабатывать события клавиш теоретически можно в любом месте игрового цикла, но логичнее делать это до или после процесса прорисовки(т.е. до glClear или после Display.update()).

С полученными знаниями уже можно сделать простейший Ping-Pong, но т.к. это очень долго, я рассмотрю просто движение квадрата по игровому полю.

Для начала создадим абстрактный класс AbstractEntity, что переводится как "абстрактная сущность". Абстрактная сущность наследуется всеми классами которые представляют из себя практически любого рода игровой объект.

В AbstractEntity мы создадим приватные поля типа int x,y,width,height и сгенерируем для каждого поля getter'ы и setter'ы. Для того чтобы их сгенерировать используя среду Eclipse, нужно навести на поле курсор, нажать правой кнопкой мыши, далее Source->Generate getters and setters. Все значения оставляем по умолчанию и нажмем OK. Также в конструкторе AbstractEntity запросим параметры x,y,width,height и передадим их нашим приватным полям. Теперь создадим класс Entity и наследуем AbstractEntity.
Теперь перейдем к главному классу. Создадим приватный экземпляр класса Entity. Создадим метод keyboard() и используя материал выше будем запрашивать четыре кнопки, отвечающие за движение(например, A,S,D,W). Теперь будем по нажатию клавиши будем изменять значения X и Y используя setter'ы нашего класса Entity. Если вы декрементируете Y, то сущность двинется на один пиксель вверх. Если вы инкрементируете Y, то сущность двинется на один пиксель вниз. Если вы декрементируете X, то сущность двинется на один пиксель влево, если инкрементируете то вправо. Теперь, приступим к прорисовке сущности. Вместо glBegin(...); glEnd(); который был рассмотрен в прошлом уроке, мы будем использовать метод glRectf(x1,y1,x2,y2). Таким образом после glClear(...), мы вставим следующую строку:
Код

  glRectf(название_сущности.getX(),название_сущности.getY(),название_сущности.getX() + название_сущности.getWidth(),название_сущности.getY() + название_сущности.getHeight());


Запустив данную игру, мы увидим квадрат, который мы сможем передвигать по полю клавишами которые вы указали. В моём случае это W,A,S,D.

В следующем уроке мы научимся работать с шейдерами. Спасибо за внимание c:
Категория: Создание игр | Добавил: WhoAmI (13 Июня 2015)
Просмотров: 5201 | Комментарии: 6 | Рейтинг: 3.7/3 |
Теги: Обработка событий, Геймдев, сущности, события, Клавиатура, урок, Программирование, ЯП, обработка, LWJGL
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

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

Всего комментариев: 6
+0-
6 komrad2003dima   (31 Декабря 2016 21:29)
А можно готовый код?

+0-
5 RU_Bobik_OXXX   (20 Ноября 2016 14:22)
Когда продолжение уже?

+0-
3 Fumlead   (06 Июля 2015 00:19)
FumleadПардон, но на дворе 2015 год как бе. Нельзя ли использовать шейдеры вместо допотопных матриц?

+1-
4 WhoAmI   (07 Июля 2015 13:49)
WhoAmIСтатья создана в целях обучения.
В скором времени я рассмотрю более рациональный подход.

+2-
2 PoidetLi   (21 Июня 2015 16:02)
PoidetLiglRectf(название_сущности.getX(),название_сущности.getY(),название_сущности.getX( ) + название_сущности.getWidth(),название_сущности.getY() + название_сущности.getHeight());
-_-, ну так жить скучно, лучше, создать свою функцию CreateCube(int x, int y, int width, int height)
{
glpushmatrix();
glTransferf(x,y);
glRectf(0,0,width,height);
glpopmatrix();
}
если что то написал не правильно извиняюсь

+1-
1 NovaSurfer   (15 Июня 2015 01:10)
NovaSurferВ виде гномика.
P.S. Простите не сдержался..

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Game Develop
  • EasyRPG
  • Realm Crafter
  • Boom
  • Sparrow
  • Android Game Creator
  • Nebula
  • JMonkeyEngine
  • Luxinia
  • FFilmation
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2018 Рейтинг