Уроки по 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(...), мы вставим следующую строку:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Уроки по LWJGL. Часть III. Обработка событий. Сущности», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.
glRectf(название_сущности.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(); } если что то написал не правильно извиняюсь