Не получается изменить текстуру, обращение по имени возвращает 0. При создании есть 2 потомка. Не могу понять что не так.
Версия 1.26 + ujApi
FDF
Frame "SIMPLESTATUSBAR" "TestBar" {
   Width 0.07,
   Height 0.025,
   BarTexture "Replaceabletextures\Teamcolor\Teamcolor00.blp",
   Layer "BACKGROUND" {
       Texture "TestBarBackground" {
           File "Replaceabletextures\Teamcolor\Teamcolor15.blp",
       }
   }
   Frame "SIMPLEFRAME" "TestBarFrame" {
       SetAllPoints,
       DecorateFileNames,
       Layer "ARTWORK" {
           String "TestBarText" INHERITS "TestBarTextTemplate" {
               Text "BarText",
           }
       }
   }
}
CODE
function Trig_LoadMainFrame_Actions takes nothing returns nothing
    local framehandle window = CreateSimpleFrame("TestBar", GetOriginFrame(ORIGIN_FRAME_GAME_UI,0), 1)
    local framehandle bar = GetFrameByName("TestBarBackground",1)


        call SetFrameAbsolutePoint(window, FRAMEPOINT_CENTER, 0.3, 0.3)
        call SetFrameSize(window, 0.05, 0.05)

        call SetFrameTexture(window,"ReplaceableTextures\\CommandButtons\\BTNHeroPaladin.blp",0, true)
        call SetFrameTexture( bar, "ReplaceableTextures\\CommandButtons\\BTNFootman.blp", 0, true)

        call printi("ID", GetHandleId(bar))
		call printi("count", GetFrameChildrenCount(bar))

endfunction

Принятый ответ

есть другой способ (то, что ты используешь)
Кратко: у вам могут быть созданы очень много фреймов с одного шаблона. Но доступ к нему можно получить один раз - при создании. Обычно мы указываем в нативках создания имя шаблона. О чем я говорю? О том, что BlzGetFrameByName получает фрейм только в момент создания.
local backdrop = BlzCreateFrame("MyBackdropTemplate", gameUI, 0, 0)
local my_text = BlzGetFrameByName("MyTEXT") //потомок
обратиться к MyTEXT не просто. Поэтому нужно записывать все фреймы в переменные.
Мне показалась, что функция GetFrameByName странной, у нее еще в аргументах индекс откуда-то берется. В рефе такого не было. Попробуй другую функцию. Тут море функц. Наверн какая особенность рефа
native GetFrameByName 									takes string frameName, integer createContext returns framehandle // searches for any frame, priority is as follows: CFrame > CSimpleFrame > CSimpleFontString > CSimpleTexture
native GetCFrameByName 									takes string frameName, integer createContext returns framehandle
native GetCSimpleFontStringByName 						takes string frameName, integer createContext returns framehandle
native GetCSimpleTextureByName 							takes string frameName, integer createContext returns framehandle
native GetCSimpleFrameByName 							takes string frameName, integer createContext returns framehandle

native GetFrameName 									takes framehandle whichFrame returns string
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
27
1 год назад
Отредактирован MpW
0
Мне кажется, что ты фрейм неверно достаешь.
Если по имени не получается, пробуй тогда потомка найти
local framehandle bar = GetFrameByName("TestBarBackground",1)
Есть спец функции у Unryze, не знаю работают ли они
native GetCSimpleTextureByName 							takes string frameName, integer createContext returns framehandle
native GetCSimpleFrameByName 							takes string frameName, integer createContext returns framehandle
Или пробуем потомка TestBar подцепить. Помним, что нумерация там от 0 идет.
native GetFrameChildrenCount 							takes framehandle whichFrame returns integer
native GetFrameChild 									takes framehandle whichFrame, integer index returns framehandle
У симплфрейм нельзя менять текстуру динамично, как только пропишешь в fdf backdrop. Они уже становятся пермаментными. Аналогично, это будет string, BarTexture и др. К сожалению, никак. Не знаю, есть ли рабочие функц к Unryze
Обычно было сложно получить texture, string. Они никогда не создаются отдельно, и явлюятся телом родителя (simplebutton, simlestatusbar, simpleframe). Их найти то можно было, но часто фаталило, если что-то изменяешь, или хочешь сделать триггером. Часто это как часть родителя, если и нужно кому менять, то это родителю нужно изменить string, texture, если получится
Было решение. Ты не прописывай фон (рамку) в fdf, только полоску BarTexture оставь. Триггером создавать текстуру отдельно, вот и решение.
Что мешает создать точно такой симплстатус бар в fdf, но с другой рамкой?
0
27
1 год назад
Отредактирован MpW
0
есть другой способ (то, что ты используешь)
Кратко: у вам могут быть созданы очень много фреймов с одного шаблона. Но доступ к нему можно получить один раз - при создании. Обычно мы указываем в нативках создания имя шаблона. О чем я говорю? О том, что BlzGetFrameByName получает фрейм только в момент создания.
local backdrop = BlzCreateFrame("MyBackdropTemplate", gameUI, 0, 0)
local my_text = BlzGetFrameByName("MyTEXT") //потомок
обратиться к MyTEXT не просто. Поэтому нужно записывать все фреймы в переменные.
Мне показалась, что функция GetFrameByName странной, у нее еще в аргументах индекс откуда-то берется. В рефе такого не было. Попробуй другую функцию. Тут море функц. Наверн какая особенность рефа
native GetFrameByName 									takes string frameName, integer createContext returns framehandle // searches for any frame, priority is as follows: CFrame > CSimpleFrame > CSimpleFontString > CSimpleTexture
native GetCFrameByName 									takes string frameName, integer createContext returns framehandle
native GetCSimpleFontStringByName 						takes string frameName, integer createContext returns framehandle
native GetCSimpleTextureByName 							takes string frameName, integer createContext returns framehandle
native GetCSimpleFrameByName 							takes string frameName, integer createContext returns framehandle

native GetFrameName 									takes framehandle whichFrame returns string
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.