Логин: * Пароль: * Регистрация Забыли пароль?
Нет ответов
  \|/
Гость
Гость
+5721 
 -2323

Автор: strelok200
Платформа: ЗП

Итак, уважаемые, прежде чем приступить к этому уроку я вам советую прочесть статью от FantomIcw, которая поможет вам научиться работать с текстурами GUI, правильно размещать соответствующие элементы
http://ap-pro.ru/forum/21-9830-1
Ну а если вы уже ознакомились, то давайте приступим к созданию окошка с новым элементом: шкала
В игре примерно выглядит вот так.

Spoiler: Highlight to view

Элементы GUI

Сегодня мы разберем как создается такой элемент
Возьмем соответственно две основные текстуры
http://yadi.sk/d/4jwtk_aAEYH3e
Рассматривать размещение элементов, координаты, коллбеки я не буду, перейду сразу к скриптовой части.
Цель следующая: ГГ должен выставить ползунок шкалы в определенном месте и нажать кнопку. В том случае, если ГГ выставил ползунок "верно" и нажал на кнопку, то выдадим ему инфопоршень. Для начала определим, ту зону, в которой мы будем считать, что ползунок выставлен верно и соответственно код будет следующим
Spoiler: Highlight to view

----------------Прибор радиста--------------------------------------------------
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, то выдадим инфопоршень. Код будет следующим
Spoiler: Highlight to view

----------------Прибор радиста--------------------------------------------------
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 (подробно рассматривать не буду)

Spoiler: Highlight to view

<?xml version="1.0" encoding="windows-1251"?>


gui\svezist

gui\radio



ui_inGame2_Mp_bigbuttone
get out of here


⇓⇓ Поделитесь событием с друзьями! ⇓⇓

Спасибо сказали: ДартМорт, Турбо, Азазель,
Stalker.Uz
Зарегин: 06/03/2009
На сайте

Актуальные темы на сегодня
Подыхать надо было в Зоне,а не в светлом будущем. © Мракобес "Свинцовый закат"
Наверх Вниз