Добавлен , опубликован

Основы Интерфейса

Содержание:
кратко: для чего этот урок? тут показывают, что можно обратиться к фрейму посредством нативки BlzGetFrameByName(“name”,context). И изменить значение дерева. Это работает не только с деревом.
когда мы создавали кнопку, мы должны были изменить изображение. За изображение отвечает отдельный дочерний фрейм - backdrop. При задании изображения кнопки нужно обращаться не к button, а к backdrop.
код
//Create "HeroSelectorButton", for game UI
    local framehandle buttonFrame = BlzCreateFrame("HeroSelectorButton", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 0, 0)
//By Having created "HeroSelectorButton" also its children are created, this children are accessed using BlzGetFrameByName right after the creation or later one if the slots were not taken by other frames.
    local framehandle buttonIconFrame = BlzGetFrameByName("HeroSelectorButtonIcon", 0)
//Set a Texture
    call BlzFrameSetTexture(buttonIconFrame, "ReplaceableTextures\\CommandButtons\\BTNSelectHeroOn", 0, true)
// Place the buttonFrame to the center of the screen
    call BlzFrameSetAbsPoint(buttonFrame, FRAMEPOINT_CENTER, 0.4, 0.3)
// Give that buttonFrame a size
    call BlzFrameSetSize(buttonFrame, 0.05, 0.05)
Или когда мы создавали кнопку с текстом, мы должны не только создать кнопку, но и задать текст кнопке. Чтобы задать/изменить текст, нужно обратиться к фрейму TEXT. Поэтому обращались к фрейму TEXT по имени
(текст можно привязать и кнопке, в fdf-коде привязывают TEXT к button с помощью ButtonText "ScriptDialogButtonText" поэтому можно было и в кнопке изменять текст):
код
function CreateButton2 takes nothing returns nothing
   local framehandle mainButton  = BlzCreateFrame("ScriptDialogButton", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI,0), 0,0)
   local framehandle buttonText = BlzGetFrameByName("ScriptDialogButtonText",0)  //Get The buttons textChild
   call BlzFrameSetSize(mainButton, 0.12, 0.05)
   call BlzFrameSetAbsPoint(mainButton, FRAMEPOINT_CENTER, 0.3,0.3)
   call BlzFrameSetText(buttonText, "My ButtonText")
endfunction
Или когда создавали backdrop, нам нужно было изменить у Text-Child текст. Тут в файле fdf коде TEXT никак не привязан к backdrop.
код
local framehandle backdrop = BlzCreateFrame("MyBackdrop", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0),0, 0)
local framehandle text = BlzGetFrameByName("MyText",0) //получаем text-children

call BlzFrameSetSize(backdrop, 0.1, 0.1)
call BlzFrameSetAbsPoint(backdrop, FRAMEPOINT_CENTER, 0.4, 0.3)
call BlzFrameSetText(text, "всем привет") //привычный "привет мир" изменил на "всем привет"
тоже самое можно посмотреть урок как показать больше 1 мультиборда. Когда создают мультиборд, можно точно также обратиться к frame мультиборда. А в игре показывают только один мультиборд, когда создается второй, первый прячет игра. У вас должны остаться запись к фреймам в переменных, а то игра с названием таких фреймов показывает фреймы другого мультиборда. Теперь берем и точно также обращаемся ко второму мультиборду, записывая в переменных. А потом отображаем несколько мультибордов с помощью фреймов. Игра не будет ничего прятать, она не знает об этом.
Как изменить значения древесины в интерфейсе? источник - тут пример карты
Это пример, показывающий, как с помощью jass изменить отображаемый текст в поле “древесина” вверху экрана. Сначала нам нужно знать, как обратиться к фрейму, показывающий значения древесины. Он называется «ResourceBarLumberText». После того, как кто-то знает имя фрейма, он получает доступ к нему с помощью BlzGetFrameByName.
BlzGetFrameByName загружает фрейм, используя строку (имя) и целое число (контекст создания). После получения фрейма на нем используется BlzFrameSetText , с текстом, который нужно показать.
код
function ChangeLumberTextBox takes nothing returns nothing
   local framehandle fh = BlzGetFrameByName("ResourceBarLumberText" , 0) //Load "ResourceBarLumberText" with creationcontext 0
   call BlzFrameSetText(fh , "Lumber") //Change the text to Lumber
   set fh = null
endfunction 
После использования / вызова ChangeLumberTextBox () ваш экран должен выглядеть примерно так: следует использовать ChangeLumberTextBox () после завершения инициализации карты.
Как только локальному игроку потребуется обновить текст древесины, ваш пользовательский текст будет потерян. Помните, что значения древесины постоянно обновляются, поэтому тут же вернет значения ресурса. Чтобы заменить, вам нужно заменить на собственный самодельный фрейм, и тогда не будет никаких проблем с фреймом.
Точно также можно изменить тексты, отображаемые в других блоках ресурсов (золото, еда итл), используя другое имя внутри BlzGetFrameByName. Если конечно, вы знаете имена, или как к ним обратиться.
  • золото: «ResourceBarGoldText»
  • древесина: «ResourceBarLumberText»
  • еда: «ResourceBarSupplyText».
  • уровень содержания (нет, низкий, высокий): «ResourceBarUpkeepText»
Использование BlzGetFrameByName только для одного игрока может рассинхронизировать игру, поэтому рекомендуется установить его в значение переменной перед блоком GetLocalPlayer и использовать эту переменную внутри локального блока.
Можно создать свои ресурсы в интерфейсе
Пример ссылка

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
32
2 года назад
0
Есть информация по фрейму fps/ping/apm? я знаю что он к панели ресурсов привязан
0
27
2 года назад
Отредактирован MpW
0
Bergi_Bear, xgm.guru/p/wc3/defaultframelist3
смотрим 2. ResourceBarFrame
информация есть. упоминается только тут. как 5 потомок ResourceBarFrame. но это все. попробуй вызвать как потомка. только сначала чекни кол-во потомков для точности. и виден ли он в данный момент..
1
32
2 года назад
Отредактирован Берги
1
МрачныйВорон, ну это я и так знал, просто единственный вариант его использования это задирать панель ресурссов, и забивать на неё, код такой
function ReturnFPS()
    local fps = BlzGetFrameByName("ResourceBarFrame", 0)
    BlzFrameSetVisible(fps, true)
    BlzFrameClearAllPoints(fps)
    BlzFrameSetAbsPoint(fps, FRAMEPOINT_CENTER, 0.95, 0.62)
end
Выглядит вот так:
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.