LUA, WOW адоны

Шаг Второй: «Привет жестокий мир вер 2.01″
В котором мы создаем фрейм.

Продолжаем, сегодня мы попробуем вывести надпись «Hello World» во фрейм.
Создаем папку Hello_World2 далее создаем там toc фаил Hello_world2.toc в которой пишем:

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

Тут по идее должно быть всем все понятно ) Потому как разницы между предыдущей версией только последняя строчка, которая сообщает игре что у нас есть lua фаил.
Который мы сейчас создадим, и в который напишем следующие:

HelloWorld2Frame = CreateFrame(«Frame»);
HelloWorld2Frame:SetHeight(50);
HelloWorld2Frame:SetWidth(150);
HelloWorld2Frame:SetPoint(«CENTER», 0, 0);

Запускаем игру проверяем…. Хм…. и что? ) Правильно фиг знает что мы же ничего не видем ) Такчто разбираем по строчкам.
1. строка создает переменную HelloWorld2Frame которая создает фрейм (окошко, панелька… Хм… вообщем фрейм :)
Далее мы описываем его параметры:
2. строка задает высоту
3. задаем ширину.
4. задаем позицию, тут CENTER означает что фрейм располагается относительно центра экрана, а «0,0″ координаты по X и Y. Тоесть начало оси координат у нас привязано к центру экрана.

Теперь нам нужно сделать чтобы фрейм было видно, добавляем строчки:

HelloWorld2Frame = CreateFrame(«Frame»);
HelloWorld2Frame:SetHeight(50);
HelloWorld2Frame:SetWidth(150);
HelloWorld2Frame:SetPoint(«CENTER», 0, 0);
HelloWorld2Frame.texture = HelloWorld2Frame:CreateTexture();
HelloWorld2Frame.texture:SetAllPoints(HelloWorld2Frame);
HelloWorld2Frame.texture:SetTexture(1,1,0);

Проверяем работу, замечательно. По центру экрана у нас появился прямоугольник желтого цвета. Разберём построчно:

5. Создаем текстурку
6. Насколько я понимаю SetAllPoints(HelloWorld2Frame) растягивает текстурку по всему фрейму.
7. Задает цвет текстурки, где (1,1,0) значит (Красный, зеленый, синий), тоесть три основных цвета, смешиванием которых в реале можно получить любой другой цвет… Хотя в реале еще требуется два дополнительных цвета белый и черный… И как их тут добится не понятно, ну да и не важно, возвращаемся к тому что у нас получилось.
А получился у нас желтый так как смешались красный и зеленый. Сюда можно былобы пихнуть еще один параметр отвечающий за альфа канал(прозрачность), но мы этого делать не будем, потому что меня вообще не радует этот прямоугольник в один цвет. Поэтому мы сейчас изменим это все :) Например вот так:

HelloWorld2Frame = CreateFrame(«Frame»);
HelloWorld2Frame:SetHeight(50);
HelloWorld2Frame:SetWidth(150);
HelloWorld2Frame:SetPoint(«CENTER», 0, 0);
HelloWorld2Frame:SetBackdrop(StaticPopup1:GetBackdrop());

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

HelloWorld2Frame = CreateFrame(«Frame»);
HelloWorld2Frame:SetHeight(50);
HelloWorld2Frame:SetWidth(150);
HelloWorld2Frame:SetPoint(«CENTER», 0, 0);
HelloWorld2Frame:SetBackdrop({bgFile = «Interface/Tooltips/UI-Tooltip-Background»,
edgeFile = «Interface/Tooltips/UI-Tooltip-Border»,
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 4, right = 4, top = 4, bottom = 4 }});

Проверяем, работает, но вот ведь зараза опять белеберда какаята… Ладно вроде становится ясно что SetBackdrop задает текстуру из готового набора. где bgFile путь до фаила тестуры для бекграунда, а edgeFile путь до текстурки бардюра… но вот ведь трабла, я этих папок не вижу )
Ладно идем дальше, tile это принцип наложения текстуры, где весь наш фрейм складывается из квадратиков 16 на 16. А вот insets не понятен… в вике это выглядит так:

insets
4 x Number — Controls how far into the frame the background will be drawn (use higher values the thicker the edges are)

Блин, и вот что это значит? Контролирует как… глубоко, далеко, давно? во фрейме будет расположен бекграунд? Добавляем строчку и проверяем.

HelloWorld2Frame = CreateFrame(«Frame»);
HelloWorld2Frame:SetHeight(50);
HelloWorld2Frame:SetWidth(150);
HelloWorld2Frame:SetPoint(«CENTER», 0, 0);
HelloWorld2Frame:SetBackdrop({bgFile = «Interface/Tooltips/UI-Tooltip-Background»,
edgeFile = «Interface/Tooltips/UI-Tooltip-Border»,
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 14, right = 14, top = 14, bottom = 14 }});
HelloWorld2Frame:SetBackdropColor(1,1,0);

Забавно )
Я надеялся что результатом проверки будет несколько другое, а именно: Фрейм зальется желтым, а текстурка с рамкой будет по центру с отступом в 14… ну чтож, отрицательный результат это тоже результат, поскольку стало ясно как работает insets, хотя теперь не понятна иерархия, так как bgfile был заменен setBackdropColor….. Для проверки меняем их местами.

HelloWorld2Frame = CreateFrame(«Frame»);
HelloWorld2Frame:SetHeight(50);
HelloWorld2Frame:SetWidth(150);
HelloWorld2Frame:SetPoint(«CENTER», 0, 0);
HelloWorld2Frame:SetBackdropColor(1,1,0);
HelloWorld2Frame:SetBackdrop({bgFile = «Interface/Tooltips/UI-Tooltip-Background»,
edgeFile = «Interface/Tooltips/UI-Tooltip-Border»,
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 14, right = 14, top = 14, bottom = 14 }});

Проверяем… Чтож, логично ) за кем последнее слово тот и важнее ) Хорошо правим:

HelloWorld2Frame = CreateFrame(«Frame»);
HelloWorld2Frame:SetHeight(50);
HelloWorld2Frame:SetWidth(150);
HelloWorld2Frame:SetPoint(«CENTER», 0, 0);
HelloWorld2Frame: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 }});

Ну чтож на сегодня все, мы создали первый lua фаил, создали переменную Hello World :) и даже сделали ее фраймом на который научились накладывать текстурку тремя способами… мы просто имбы )
Вообщем, продолжение следует.

п.с. перечитал самое начало поста :) «Продолжаем, сегодня мы попробуем вывести надпись «Hello World» во фрейм…. » Ну не смогла я, не смогла )) И главное текст мы выведем только в четвертом шаге, потому что в третьем мы зададим возможность таскать фрейм по экрану