WarCraft 3: Перемещение фреймов с помощью курсора

» Раздел: Основы

Требования
- Уверенное пользование jass.
- Мемхак анрайза. (>1.3)
- pjass для работы мемхака. (Закинуть в JNGP/jasshelper)

Координаты курсора
Для того, чтобы перенести фрейм курсором, понятное дело, нужно получить его координаты.
Посмотрим на существующий функционал MouseAPI.
function GetCursorX takes nothing returns integer
function GetCursorY takes nothing returns integer
--
function GetCursorXRelative takes nothing returns integer
function GetCursorYRelative takes nothing returns integer
Не относительные геттеры (первые два) показывают координаты экрана.
Относительные же показывают относительно окна Варкрафта.
Абсолютный ноль GetCursor - левый верхний угол экрана.
Абсолютный ноль GetCursorYRelative - левый верхний угол окна.
В полноэкранном режиме, разницы не будет.
Поэтому, правильней взять - GetCursorRelative. Фреймовые координаты тоже относительные, поэтому это было очевидно еще с самого начала.

Фреймовые координаты
Опытным путем выяснилось, что максимум X = 0.8 и максимум Y = 0.6. Все сходится, соотношение 4 на 3 же.
» Наглядная демонстрация

Конвертация
Здесь уже пригодится GameWindowAPI.
function GetWindowWidth takes nothing returns real
function GetWindowHeight takes nothing returns real
Решение назревает само собой:
Для X нужно координаты курсора умножить на 0.8 и поделить на ширину окна.
Для Y нужно координаты курсора умножить на 0.6 и поделить на высоту окна.
За нас, это уже сделал анрайз и добавил две функции в тот же апи.
function FromPixelX takes integer i returns real
function FromPixelY takes integer i returns real
Уже близко, но все еще чего-то не хватает.
Требуется инвертировать значения Y. Отнять от 0.6 наше значение
Получается вот такой код:
local real frameX = FromPixelX(GetCursorXRelative())
local real frameY = .6 - FromPixelY(GetCursorYRelative())

Использование
Чуть-чуть подшаманив над моей вчерашней наработкой, можно получить что-то такое:


Views: 184

quq_CCCP #1 - 3 months ago 1
Голосов: +1 / -0
Жаль народ так и забьет... сколько лет мемхак лежит, а всем....
loliconshik3 #2 - 3 months ago 0
Голосов: +0 / -0
Техналогии...
Daro #3 - 3 months ago 2
Голосов: +2 / -0
Народ отказывается от новых технологий потому что они не применимы на ГУИ и сложны в установке...