Платформа: Зов Припяти Автор: strelok200 Итак, уважаемые, прежде чем приступить к этому уроку я вам советую прочесть статью от FantomIcw, которая поможет вам научиться работать с текстурами GUI, правильно размещать соответствующие элементы http://ap-pro.ru/forum/21-9830-1 Ну а если вы уже ознакомились, то давайте приступим к созданию окошка с новым элементом:шкала В игре примерно выглядит вот так.
Сегодня мы разберем как создается окно в таким элементом Возьмем соответственно две основные текстуры http://yadi.sk/d/4jwtk_aAEYH3e Рассматривать размещение элементов, координаты и коллбеки я не буду, перейду сразу к скриптовой части. Цель следующая: ГГ должен выставить ползунок шкалы в определенном месте и нажать кнопку. В том случае, если ГГ выставил ползунок "верно" и нажал на кнопку, то выдадим ему инфопоршень. Для начала определим, ту зону, в которой мы будем считать, что ползунок выставлен верно и соответственно код будет следующим
Код
----------------Прибор радиста-------------------------------------------------- class "radist_pribor" (CUIScriptWnd) --Регистрация нового класса
function radist_pribor:__init() super() self:InitControls()--Иницилизация класса. Ссылка к функции self:InitCallBacks()--Иницилизация класса. Ссылка к функции end
function radist_pribor:__finalize() --ф-ция завершения работы нового класса end
function radist_pribor:InitControls() --функция, отвечающая за элементы окна local xml = CScriptXmlInit() self:SetWndRect(Frect():set(0,0,1024,768)) --установка размеров файла xml:ParseFile("radist_pribor.xml") --парсим ui файл self.Element1 = xml:InitStatic("Element1", self) --регистрация первого элемента с текстурой self.Element2 = xml:InitStatic("Element1:Element2", self.Element1) --регистрация второго элемента с текстурой self.shkala = xml:InitTrackBar("Element1:Element2:shkala", self.Element2) --регистрация шкалы self:Register(xml:Init3tButton("Element1:button1", self.Element1), "button1") --регистрация кнопки
end
function radist_pribor:InitCallBacks() --ф-ции колбеков self:AddCallback("button1", ui_events.BUTTON_CLICKED, self.button1_button_clicked, self) --коллбек кнопки end
function radist_pribor:trackbar2_GetValue() --шкала. Получаем определенное значение return math.floor(0 + (self.shkala:GetFValue() * (100 - 0))) --возвращаем это значение end
function radist_pribor:button1_button_clicked() --ф-ция, при нажатии на кнопку local text = "Значение = "..tostring( self.shkala:GetFValue() ) --выведем на экран значение переменной news_manager.send_tip(db.actor,text,0,"ui_inGame2_Dolg_2",1000,nil,"sender") self:HideDialog() --скрыть окно end
function radist_gui(folder) folder:ShowDialog(true) end
Теперь заходим в игру, выставляем ползунок как хотим, нажимаем кнопку. На экран будет выведено значение переменной self.shkala:GetFValue() Запоминаем это число, затем выставляем ползунок в другом месте, на экране увидим новое значение. У меня грубо говоря получились значения 0.4 и 0.5 Теперь сделаем проверку: если значение переменной self.shkala:GetFValue() больше 0.4 и меньше 0.5, то выдадим инфопоршень. Код будет следующим
Код
----------------Прибор радиста-------------------------------------------------- class "radist_pribor" (CUIScriptWnd) --Регистрация нового класса
function radist_pribor:__init() super() self:InitControls()--Иницилизация класса. Ссылка к функции self:InitCallBacks()--Иницилизация класса. Ссылка к функции end
function radist_pribor:__finalize() --ф-ция завершения работы нового класса end
function radist_pribor:InitControls() --функция, отвечающая за элементы окна local xml = CScriptXmlInit() self:SetWndRect(Frect():set(0,0,1024,768)) --установка размеров файла xml:ParseFile("radist_pribor.xml") --парсим ui файл self.Element1 = xml:InitStatic("Element1", self) --регистрация первого элемента с текстурой self.Element2 = xml:InitStatic("Element1:Element2", self.Element1) --регистрация второго элемента с текстурой self.shkala = xml:InitTrackBar("Element1:Element2:shkala", self.Element2) --регистрация шкалы self:Register(xml:Init3tButton("Element1:button1", self.Element1), "button1") --регистрация кнопки
end
function radist_pribor:InitCallBacks() --ф-ции колбеков self:AddCallback("button1", ui_events.BUTTON_CLICKED, self.button1_button_clicked, self) --коллбек кнопки end
function radist_pribor:trackbar2_GetValue() --шкала. Получаем определенное значение return math.floor(0 + (self.shkala:GetFValue() * (100 - 0))) --возвращаем это значение end
function radist_pribor:button1_button_clicked() --ф-ция, при нажатии на кнопку if self.shkala:GetFValue()>=0.4 and self.shkala:GetFValue()<=0.5 then --если значение переменной больше 0.4 и меньше 0.5, то db.actor:give_info_portion("actor_gui_info") --выдадим ГГ инфопоршень self:HideDialog() end end
function radist_gui(folder) folder:ShowDialog(true) end
Содержание файла radist_pribor.xml (подробно рассматривать не буду)