Сенсор Mouse. Урок 5

Сенсор Mouse в Blender Game Engine

Отображение курсора мыши в режиме игры

Среди множества сенсоров в BGE есть и сенсор Mouse (мышь), улавливающий различные манипуляции мыши (щелчки кнопками мыши, движение, прокручивание колеса и др.). Однако, при запуске режима игры (P) мы не видим курсор мыши. Чтобы отобразить курсор нужно прописать небольшой скрипт. Для этого разделите 3D-окно на две части, одну из них поменяйте на окно Text Editor. Далее раскройте меню Textи выберите пункт New. По умолчанию первый скрипт будет называться Text.001, лучше ему дать более осмысленное имя (например, mouse). Затем в окне следует ввести следующие строки:

import Rasterizer 
Rasterizer.showMouse(1)

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

Скрипт для отображения курсора мыши в режиме игры в BGE

Однако, это еще не все. Нужно привязать данный скрипт к какому-либо объекту на сцене (допустим камере). Для того, чтобы курсор отображался всегда, следует добавить активатор Always и связанный с ним контроллер Python, где в качестве Script указывается имя того скрипта, который был создан ранее (в нашем случае, это mouse). Активатор в данном случае не требуется. После этого в режиме игры курсор будет виден.

Отображение курсора мыши в режиме игры в BGE: панель Logic

Управление 3D-объектами с помощью мыши в Blender Game Engine

Движение 3D-объекта с помощью мыши в BGE: панель Logic

Пусть на сцене будет плоскость и Rigid-сфера на ней. Сфера будет управляться с помощью мыши следующим образом:

  1. Если сфера находится на плоскости (а не в «воздухе»), то щелчок левой кнопкой мыши по ней должен «сообщать» силу, приводящую ее в движение вверх.
  2. Прокрутка колеса мыши вверх и вниз должна «сообщать» сфере вращающий момент (Torque) по оси Z по часовой и против часовой стрелки.

Разберем, как это сделать. Добавив сенсор Mouse->Left button и связав его с активатором Motion, мы заставим сферу лететь вверх при нажатии левой кнопкой мыши в любом месте 3D-окна (в режиме игры). Тут две проблемы: во-первых, сфера взлетает от щелчка в любом месте экрана, а во-вторых, она летит даже тогда, когда уже находится не на плоскости. Проблемы решаются с помощью добавления еще двух сенсоров к уже существующим контроллеру и активатору. Один должен быть Mouse -> Mouse over, второй – Touch.
За прокрутку колеса отвечают сенсоры Mouse -> Wheel up (вверх) и Mouse -> Wheel down (вниз). Каждому следует добавить свой контроллер и активатор.

Практическая работа

  1. Расположите на сцене три любых объекта на плоскости. Установите для них тип Rigid body. При щелчке левой кнопкой мыши по каждому отдельному объекту он должен отскакивать в какую-нибудь сторону, а при щелчке правой кнопкой мыши в любом месте 3D-окна все объекты должны взлетать вверх.
  2. На новой сцене расположите сферу (Rigid body) и плоскость под ней. Пусть любое движение мыши (Movement) заставляет объект крутиться по оси X или Y, а щелчок левой кнопкой мыши «сообщает» силу движения вперед в выбранном направлении. Отметьте, есть ли разница в скорости между двумя случаями: 1) сначала сфера крутится, а затем получает толчок вперед, 2) сфера сразу толкается вперед.

Создано