Програмирование на LUA

Шаг третий: «Привет жестокий мир вер 2.02″
В котором продолжаем мучать фрейм, а именно создаем возможность таскать фрейм по экрану.

Итак опять создаем новую папку Hello_World_3, и создаем там toc фаил:

## Interface: 30200
## Title: |cFF0000FF Hello world 3
## Title-ruRU: |cFF0000FF Привет жестокий мир 3
## Author: Ekva
## Notes: «Hello world 3″
## Notes-ruRU: «Хелоу ворлд 3″
Hello_world_3.lua

И теперь берем наш старый луа фаил, и для начала переписываем HelloWorld2 на HelloWorld3 :) Потом, в первой строчке обзываем наш фрейм как HelloWorldFrame

HelloWorld3Frame = CreateFrame(«Frame», HelloWorldFrame);

Далее практически без изменений вставляем следующие строчки:

HelloWorld3Frame:SetHeight(50);
HelloWorld3Frame:SetWidth(150);

После чего правим строчку описывающею позицию фрейма, в которой сообщаем игре что позицию по Х и Y нужно брать из переменных.
HelloWorld3Frame:SetPoint(«CENTER», HelloWorldFrame_X, HelloWorldFrame_Y);

После чего добавляем строки текстурки.

HelloWorld3Frame:SetBackdrop({bgFile = «Interface/Tooltips/UI-Tooltip-Background»,
edgeFile = «Interface/Tooltips/UI-Tooltip-Border»,
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 3, right = 3, top = 3, bottom = 3 }});

На выходе получаем:
HelloWorld3Frame = CreateFrame(«Frame», HelloWorldFrame);
HelloWorld3Frame:SetHeight(50);
HelloWorld3Frame:SetWidth(150);
HelloWorld3Frame:SetPoint(«CENTER», HelloWorld3Frame_X, HelloWorld3Frame_Y);
HelloWorld3Frame:SetBackdrop({bgFile = «Interface/Tooltips/UI-Tooltip-Background»,
edgeFile = «Interface/Tooltips/UI-Tooltip-Border»,
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 3, right = 3, top = 3, bottom = 3 }});

Тестируем… О как, игре плевать на то что переменные HelloWorldFrame_X и Y не заданны… фрейм всеравно виден… Ну и ладно мы всеравно их зададим. Добавляем строчки, но помня о прошлом шаге тоесть о том как у нас заменялись текстурки, ставим строчки перед строкой с SetPoint:

HelloWorld3Frame_X = 200
HelloWorld3Frame_Y = 0

Тестируем, работает, фрейм сместился. Далее добавляем:

HelloWorld3Frame:EnableMouse(true)
HelloWorld3Frame:SetMovable(true)
HelloWorld3Frame:RegisterForDrag(«LeftButton»)

Итак построчно:
1. Странный параметр который как подсказывает переводчик санкционирует реакцию на мышку ) Ну мы что, мы не против, пишет (тру). Хм… тоесть по умолчанию фрейм без этого параметра не реагирует на мышку, и сквозь него можно спокойно тыкать.
2. Делаем его передвигаемым
3. По клику какой мышки он должен быть двигабельным, у нас по левому клику.

Тестируем, не таскается ) Добавляем еще три строки:

HelloWorld3Frame:SetScript(«OnDragStart», function(DvigaiPopoi)
DvigaiPopoi:StartMoving()
end)

1я — создаем скрипт «SetScript», задаем на какое событие он должен реагировать, у нас на начало таскания «OnDragStart». и задаем действие на событие, действие у нас функция под названием DvigaiPopoi.
2я — присваеваем действие функции DvigaiPopoi, действием у нас будет StartMoving.
3я — конец скрипта :)

Так теперь смотрим что у нас вышло в сумме:

HelloWorld3Frame = CreateFrame(«Frame», HelloWorldFrame);
HelloWorld3Frame:SetHeight(50);
HelloWorld3Frame:SetWidth(150);
HelloWorld3Frame_X = 200;
HelloWorld3Frame_Y = 0;
HelloWorld3Frame:SetPoint(«CENTER», HelloWorld3Frame_X, HelloWorld3Frame_Y);
HelloWorld3Frame:SetBackdrop({bgFile = «Interface/Tooltips/UI-Tooltip-Background»,
edgeFile = «Interface/Tooltips/UI-Tooltip-Border»,
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 3, right = 3, top = 3, bottom = 3 }});
HelloWorld3Frame:EnableMouse(true);
HelloWorld3Frame:SetMovable(true);
HelloWorld3Frame:RegisterForDrag(«LeftButton»);
HelloWorld3Frame:SetScript(«OnDragStart», function(DvigaiPopoi)
DvigaiPopoi:StartMoving()
end)

Проверяем… Попались? Ж) Правим, точнее скидываем прилипший к мышке фрейм, да советую поставить на единичку макрос: /script ReloadUI(); для перезагрузки, хотя это наверно нужно было раньше сказать :) Так что сейчас в виндах игру получится закрыть только по альт+ф4 )

И так добавляем скрипт отвечающий за остановку таскания фрейма:

HelloWorld3Frame:SetScript(«OnDragStop», function(HvatitDvigatPopoi)
HvatitDvigatPopoi:StopMovingOrSizing()
end)

Ну чтож фрейм двигается, на этом и закончим на сегодня :) Конечно он не сохраняет позицию после перегрузки, но блин у меня итак два хвоста которые нужно добить а именно вывод текста во фрейм, и как получить путь до текстур фреймов… так что проблему сохранения позиции отложим на потом.

вообщем продолжение следует….