Skip to content

Latest commit

 

History

History
133 lines (102 loc) · 6.07 KB

README-ru.md

File metadata and controls

133 lines (102 loc) · 6.07 KB

EN | RU

< Назад Начало Далее >
01. Цвет фона Самоучители 03. Сферы

02. Мышь

В этом самоучителе мы задаём цвет фона на нажатие кнопок мыши.

Ориентировочное время выполнения: 5 минут.

Содержание

Давайте отследим нажатия и отпускания кнопок мыши:

local mouse = main.application.mouse
mouse.pressedButtonsChanged:addCallback(
    function()
        print("Mouse buttons have been pressed or released")
        print("Pressed buttons:", #mouse.pressedButtons)
    end
)

Запустить в ogse

Давайте взглянем на новый использованный нами API:

  • main.application.mouse (экземпляр) позволяет получить текущие свойства мыши (пальца) вроде позиции, нажатых кнопок мыши и подписаться на их изменения
  • main.application.mouse.pressedButtons (массив) содержит список нажатых кнопок мыши
  • main.application.mouse.pressedButtonsChanged (экземпляр core::Reporter) уведомляет о нажатии и отпускании кнопок мыши
    • для подписки на все уведомления мы используем метод addCallback() экземпляра core.Reporter:
      main.application.mouse.pressedButtonsChanged:addCallback(
          function()
              print("Mouse buttons have been pressed or released")
          end
      )
  • core (пространство имён) содержит функциональность, используемую во всём приложении
  • core.Reporter (класс) реализует шаблон "Издатель-подписчик" для упрощения циркуляции сообщений между независимыми частями приложения
  • core.Reporter:addCallback() (метод) позволяет подписаться на все сообщения от конкретного экземпляра core.Reporter

Замечания:

  • pressedButtonsChanged является экземпляром, который мы слушаем
  • addCallback() является методом экземпляра pressedButtonsChanged
  • pressedButtonsChanged и addCallback разделены :, т.к. это вызов метода
  • function() ... end является функцией обратного вызова (замыканием), исполняемым при получении каждого уведомления
  • # является оператором, возвращающим количество элементов массива

Взгляните на консоль отладки. Вы должны увидеть примерно такой вывод при нажатии кнопок мыши:

Mouse buttons have been pressed or released
Pressed buttons:    1
Mouse buttons have been pressed or released
Pressed buttons:    0
Mouse buttons have been pressed or released
Pressed buttons:    1
Mouse buttons have been pressed or released
Pressed buttons:    2
Mouse buttons have been pressed or released
Pressed buttons:    1
Mouse buttons have been pressed or released
Pressed buttons:    0

Давайте устанавливать красный цвет фона, когда нажата хотя бы одна кнопка мыши, и возвращать цвет фона к значению 0.2, 0.2, 0.4, если ни одна из кнопок мыши не нажата:

local DEFAULT_COLOR = {0.2, 0.2, 0.4}
local PRESSED_COLOR = {1.0, 0.0, 0.0}

local mouse = main.application.mouse
local camera = main.application.camera

mouse.pressedButtonsChanged:addCallback(
    function()
        if (#mouse.pressedButtons > 0)
        then
            camera.clearColor = PRESSED_COLOR
        else
            camera.clearColor = DEFAULT_COLOR
        end
    end
)

Запустить в ogse

Теперь цвет фона красный при удеражинии кнопки (кнопок) мыши.

Вы успешно отследили нажатия кнопок мыши и переключили цвет фона.

< Назад Начало Далее >
01. Цвет фона Самоучители 03. Сферы