Ogre3D Basic Tutorials / Базовые туториалы Ogre3D: Basic Tutorial 5: Buffered Input

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

КРАТКОЕ СОДЕРЖАНИЕ

proVIDec 28.06.11 в 10:24

0

ВВЕДЕНИЕ В РУКОВОДСТВО

wuffur 22.07.11 в 12:43

0

ВВЕДЕНИЕ

Mingun 22.07.11 в 15:15

0

В этом коротком разделе руководства вы будете учиться использовать буферизованный ввод OIS в отличии от небуферизованного ввода, который мы использовали в предыдущем разделе руководства.

wuffur 13.07.11 в 06:41

0

В этом коротком уроке вы научитесь использовать буферизованный ввод OIS, в противоположность небуферизованному, который мы использовали в прошлом уроке.

Mingun 22.07.11 в 15:18

1

Этот раздел руководства отличается от предыдущего тем, что мы будем управлять событиями клавиатуры и мыши непосредственно, когда они происходят, вместо одного раза за кадр.

wuffur 13.07.11 в 06:42

0

Этот урок отличается от предыдущего тем, что мы будем обрабатывать события клавиатуры и мыши сразу, как они произойдут, а не один раз за каждый кадр.

Mingun 22.07.11 в 15:19

1

Отметим, это означает, что этот раздел руководства только введение в буферизованный ввод, и не является полным рукводством по тому, как использовать OIS.

wuffur 13.07.11 в 06:44

0

Учтите, что этот урок годится только в качестве введения в буферизованный ввод и не является полным руководством по использованию OIS.

Mingun 22.07.11 в 15:22

1

Если хотите больше информации об этом, обязательно посмотрите на статью Использование OIS.

wuffur 13.07.11 в 06:45

0

Для более полной информации о нем обязательно прочтите статью Использование OIS (Using OIS).

Mingun 22.07.11 в 15:24

1
+3

ДЛЯ НАЧАЛА

proVIDec 28.06.11 в 10:18

0

С ЧЕГО НАЧАТЬ

Mingun 22.07.11 в 15:27

0

Этот урок основан на предыдущем, но мы изменим способ, которым мы принимаем ввод пользователя.

Mingun 22.07.11 в 15:28

2

Поскольку функциональность будет в основном та же, мы будем использовать тот же класс BaseApplication, что и в предыдущий раз.

wuffur 13.07.11 в 07:03

2

Создайте проект в компиляторе, который вы выбрали для этого проекта, и добавьте следующие строки кода:

wuffur 13.07.11 в 07:03

0

Создайте проект для компилятора, который вы выбрали для этого проекта и добавьте следующий код:

Mingun 22.07.11 в 15:30

1
+1

Объекты и способы контроля программы будут те же, что и в предыдущей части руководства.

wuffur 13.07.11 в 07:04

0

Управление программой будет таким же, как и в прошлом уроке.

Mingun 22.07.11 в 15:35

1
+2

Мы переопределим методы frameRenderingQueued и createFrameListener, как и методы слушателей событий MouseListener и KeyboardListener (keyPressed(), keyReleased(), mouseMoved(), mousePressed() и mouseReleased()).

wuffur 13.07.11 в 07:05

1
+1

КОРОТКО, О БУФЕРИЗОВАННОМ ВВОДЕ

wuffur 13.07.11 в 07:07

0

ВКРАТЦЕ О БУФЕРИЗОВАННОМ ВВОДЕ

Mingun 22.07.11 в 15:41

0
+1

ВВЕДЕНИЕ

proVIDec 28.06.11 в 06:07

1

В предыдущем разделе руководства мы использовали небуферизованный ввод, то есть каждый кадр мы запрашивали состояние экземпляров OIS::Keyboard и OIS::Mouse, чтобы увидеть какие клавиши и кнопки мыши были нажаты.

wuffur 13.07.11 в 08:08

0

В предыдущем уроке мы использовали небуферизованный ввод, то есть каждый кадр мы запрашивали состояние объектов OIS::Keyboard и OIS::Mouse, чтобы определить, какие клавиши и кнопки мыши были нажаты.

Mingun 22.07.11 в 15:45

1

Буферизованный ввод использует интерфейс listener, чтобы информировать вашу программу о произошедших событиях.

wuffur 13.07.11 в 08:09

0

Буферизованный ввод использует интерфейс слушателей для информирования вашей программы о произошедших событиях.

Mingun 22.07.11 в 15:46

0

Например, когда нажата кнопка передается событие KeyListener::keyPressed и когда кнопку отпустили(она больше не нажата), KeyListener::keyReleased событие высвечивается всем зарегистрированным классам.

wuffur 13.07.11 в 09:42

0

Например, когда нажимается клавиша, испускается событие KeyListener::keyPressed, а когда она отпускается (больше не является нажатой) - событие KeyListener::keyReleased. Они доставляются всем зарегистрированным слушателям.

Mingun 22.07.11 в 15:49

1

Это событие заботиться о том, чтобы отслеживать моменты, когда происходить переключение или были ли ключи не нажатыми в предыдущем кадре.

OIS также поддерживает события небуферизованного объекта Joystick через интерфейс OIS::JoystickListener, хотя мы не будем говорить как его использовать в этой части руководства.

wuffur 13.07.11 в 12:33

0

Это позволяет отслеживать моменты переключения или узнать, была ли клавиша отжата в предыдущем кадре.

OIS также поддерживает небуферизованные события джойстика через интерфейс OIS::JoystickListener, хотя мы не будем задерживаться на нем в этом уроке.

Mingun 22.07.11 в 15:54

0

Еще одна важная вещь, что нужно обратить внимание на системы объекта listener из OIS, состоит в том, что вы можете иметь только один объект listener на объекты Keyboard, Mouse или Joystick.

wuffur 13.07.11 в 12:35

0

Одно важное замечание об использовании системы слушателей OIS: вы можете иметь только по одному слушателю для объектов Keyboard, Mouse или Joystick.

Mingun 22.07.11 в 15:59

0

Это сделано для простоты (и для скорости).

wuffur 13.07.11 в 12:36

1
+1

Вызов функции setEventCallback (которую мы опишем ниже) несколько раз приведет к тому, что только последний зарегистрированный слушатель будет получать события.

Mingun 22.07.11 в 16:02

1
+1

Если у вас есть большое количество объектов, чтобы получить события Key, Mouse или Joystick вам придется написать сообщение отправляющее себя по назначению.

wuffur 13.07.11 в 12:50

-1

Если вам нужно несколько объектов, получающих события от клавиатуры, мыши или джойстика, вы должны написать собственный диспатчер сообщений.

Mingun 22.07.11 в 16:05

-1
+3

Также удостоверьтесь, что вы все еще можете вызывать Keyboard::capture и Mouse::capture в методе frameRenderingQueued.

wuffur 13.07.11 в 12:53

0

Также обязательно убедитесь, что вы вызвали Keyboard::capture и Mouse::capture (что значит захватить - прим. пер.) в методе frameRenderingQueued.

Mingun 22.07.11 в 16:08

0
+2

OIS не использует нити(или магию) для определения состояния клавиатуры или мыши, поэтому вам приходится определять, когда она должна захватить входной поток данных.

wuffur 13.07.11 в 13:04

0

OIS не использует потоки (или магию) для определения состояний клавиатуры и мыши, поэтому вы должны определить, когда нужно захватить ввод.

Mingun 22.07.11 в 16:10

1
+2

ИНТЕРФЕЙС ОБЪЕКТА KEYLISTENER

wuffur 13.07.11 в 13:00

0

ИНТЕРФЕЙС KEYLISTENER

Mingun 22.07.11 в 16:10

1
+1

Интерфейс объекта OIS KeyListener добавляет две виртуальные функции без примесей.

wuffur 13.07.11 в 13:01

0

Интерфейс OIS KeyListener предоставляет две чисто виртуальные функции.

Mingun 22.07.11 в 16:12

1
+5

Первая функция это keyPressed (которая вызывается каждый раз, когда нажимают кнопку) и функция keyReleased(которая вызывается каждый раз кнопка отпускается).

wuffur 13.07.11 в 13:06

0

Первая - это keyPressed (вызывается каждый раз при нажатии клавиши) и вторая - keyReleased (вызывается каждый раз при отпускании клавиши).

Mingun 22.07.11 в 16:19

1

Параметр передаваемый этим функциям это KeyEvent, который содержит кот кнопки, которую нажали/отпустили.

wuffur 13.07.11 в 13:07

0

Этим функциям передается параметр типа KeyEvent, содержащий информацию о коде нажатой или отпущенной клавиши.

Mingun 22.07.11 в 16:21

0

ИНТЕРФЕЙС ОБЪЕКТА MOUSELISTENER

wuffur 13.07.11 в 13:08

-1

ИНТЕРФЕЙС MOUSELISTENER

Mingun 22.07.11 в 16:21

0

Интерфейс объекта MouseListener все лишь немного более сложный, чем интерфейс объекта KeyListener.

wuffur 13.07.11 в 13:09

0

Интерфейс MouseListener лишь немногим сложнее интерфейса KeyListener.

Mingun 22.07.11 в 16:22

0

Он содержит функцию, которая смотрит, когда кнопка мыши была нажата или отпущена: MouseListener::mousePressed и MouseListener::mouseReleased.

wuffur 13.07.11 в 13:09

0

Он содержит функции, следящие за нажатием и отпусканием кнопок мыши: MouseListener::mousePressed и MouseListener::mouseReleased.

Mingun 22.07.11 в 16:24

1
+1

Она также содержит функцию mouseMoved, которая говорит, когда мышь подвинулась.

wuffur 13.07.11 в 13:10

0

Он также содержит функцию mouseMoved, которая вызывается, когда мышь перемещается.

Mingun 22.07.11 в 16:25

0

Каждая из этих функций получает событие MouseEvent, которое содержит текущую состояние мыши в переменной "state" .

wuffur 13.07.11 в 13:11

0

Каждая из этих функций получает объект MouseEvent, который содержит текущее состояние мыши в переменной "state".

Mingun 22.07.11 в 16:26

0

Наиболее важная вещь, о которой нужно сделать замечание, это замечание об объекте MouseState, и оно состоит в том, что она содержит не только относительные координаты X и Y (то есть, как далеко она подвинулась с предыдущего раза MouseListener::mouseMoved function was called), но также и абсолютные координаты X и Y(то есть, где она находится на экране).

wuffur 13.07.11 в 13:14

0

Самая важная вещь в объекте MouseState, о которой стоит упомянуть, это то, что он содержит не только относительные координаты X и Y перемещения мыши (т.е. расстояние, показывающее, как далеко сместилась мышь со времени последнего вызова функции MouseListener::mouseMoved), но также и абсолютные координаты (т.е. текущее положение мыши на экране).

Mingun 22.07.11 в 16:31

2

КОД

proVIDec 28.06.11 в 06:54

1

МОМЕНТ ИСТИНЫ: КОД

Mingun 22.07.11 в 16:32

2
+1

ПЕРЕМЕННЫЕ

proVIDec 28.06.11 в 06:54

0

Некоторые переменные изменились с последней части руководства.

wuffur 13.07.11 в 13:44

0

Несколько переменных изменилось с последнего урока.

Mingun 22.07.11 в 16:34

0

Я убрал mToggle и mMouseDown (которые больше не нужны).

wuffur 13.07.11 в 13:44

1

И я также добавил некоторые:

wuffur 13.07.11 в 13:44

0

Переменные mRotate, mMove и mCamNode те же, что и в последнем руководстве(хотя мы будем изменять значение mRotate, поскольку мы по-другому ее используем).

wuffur 13.07.11 в 13:45

0

Переменные mRotate, mMove и mCamNode такие же, что и в последнем уроке (хотя мы будем изменять значение mRotate, поскольку мы используем ее по-другому).

Mingun 22.07.11 в 16:37

0

Переменная mDirection содержит информацию о том как мы собираемся переводить вершину камеры каждый кадр.

wuffur 13.07.11 в 13:47

0

Переменная mDirection содержит информацию о том, как мы собираемся перемещать узел камеры каждый кадр.

Mingun 22.07.11 в 16:40

1
+2

МЕТОД CREATEFRAMELISTENER

Mingun 22.07.11 в 16:40

0
+2

В этом методе мы будем вызывать метод createFrameListener из класса BaseApplication и инициализировать некоторые из переменных.

wuffur 13.07.11 в 13:48

0
+1

Добавьте еще чуток кода в метод createFrameListener:

wuffur 13.07.11 в 13:49

1

Объекты OIS mMouse и mKeyboard уже получены в методе createFrameListener из BaseApplication.

wuffur 13.07.11 в 13:50

1

Здесь мы регистрируем объект listener вызвав метод setEventCallback на этих объекта ввода следующим образом:

wuffur 14.07.11 в 11:19

0

Здесь мы регистрируем слушателя, вызывая метод setEventCallback на объектах ввода, вот так:

Mingun 22.07.11 в 16:44

0

И наконец, нам нужно инициализировать mDirection нулевым вектором(так мы изначально не двигались, следовательно и направления нет):

wuffur 14.07.11 в 11:20

0
+2

СВЯЗЫВАНИЕ КОМБИНАЦИЙ КЛАВИШ С КОМАНДАМИ

wuffur 14.07.11 в 11:26

0

До тех пор пока мы не начали никуда переходить, нам нужно задать команду клавише Escape на выход из программы.

wuffur 14.07.11 в 11:29

0

Прежде, чем двигаться дальше, мы должны связать клавишу Escape с действием выхода из программы (не вечно же любоваться на свое творение).

Mingun 22.07.11 в 16:50

1

Найдите метод BasicTutorial05::keyPressed.

wuffur 14.07.11 в 11:29

1

Этот метод вызывается объектом KeyEvent, каждый раз когда клавиша на клавиатуре нажимается.

wuffur 14.07.11 в 11:30

0
+2
Минутку...

Следующая страница →