В маньяке с бензопилой помню было такое, хп и стамина отображались сверху в виде плавающего текста, только мне для другого надо. Не знаю как закрепить, пытался многими способами, но ни к чему хорошему не пришел, может есть идеи как это исполнить на GUI ну или если на Jass, то тогда объяснить, что и как там можно менять и для чего)

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

Например, так.
Создаёшь текст, периодическим триггером на 0.01 секунды его смещаешь. Но всё равно текст сильно дёргается. Надо вскрывать маньяка, либо DGUI, чтобы посмотреть, как там ровно сделано.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
26
5 лет назад
0
ScopteRectuS:
Hate, я не спрашивал как сделать в маньяке, я не автор этого вопроса.))
Штирлиц был как никогда близок к провалу
ну собственно, я сам задумывался над анимациями во фреймах и динамичная подмена, реально ли делать какие нибудь бары которые плавно меняют заполнение
0
29
5 лет назад
0
реально ли делать какие нибудь бары которые плавно меняют заполнение
Реально)
Я стрелочками размер фрэймов подганяю))
0
21
5 лет назад
Отредактирован scopterectus
0
    FrameFont "MasterFont", 0.013, "",
0.013 это же размер шрифта, да? Попробывал все варинаты, а размер шрифта всё равно не меняется.
NazarPunk, есть ли хоть маленький шанс найти нужный мне шрифт с нужным размером здесь
0
29
5 лет назад
0
ScopteRectuS, вчера нашёл нативку BlzFrameSetFont(frame, fileName, height, flags), попробуйте её заюзать.
1
27
5 лет назад
1
NazarPunk, бегом писать статью про интерфейс в новых патчах
0
21
5 лет назад
0
Кажется получилось сделать:
function SuperTextPrinter( toPlayer, duration, message )
    local GAME_UI = BlzGetOriginFrame( ORIGIN_FRAME_GAME_UI, 0 )
    local tooltip = BlzCreateFrameByType("TEXT", "", GAME_UI, "", 0)

    BlzFrameSetPoint( tooltip, FRAMEPOINT_TOP, GAME_UI, FRAMEPOINT_TOP, 0.0, -0.03 )
    BlzFrameSetText( tooltip, message )
    BlzFrameSetVisible( tooltip, GetLocalPlayer( ) == toPlayer )
    BlzFrameSetScale( tooltip, 2.0 )

    if duration > 0.0 then
        TimerStart( CreateTimer( ), duration - 1.0, false, function( )
            local alpha = 0xFF

            TimerStart( GetExpiredTimer( ), 0.03125, true, function( )
                alpha = alpha - 0x08

                if alpha >= 0x00 then
                    BlzFrameSetAlpha( tooltip, alpha )

                else
                    DestroyTimer( GetExpiredTimer( ) )
                    BlzDestroyFrame( tooltip )
                end
            end )
        end )

        return nil

    else
        return tooltip
    end
end
Сделал через setScale.
Загруженные файлы
0
29
5 лет назад
Отредактирован nazarpunk
0
бегом писать статью про интерфейс в новых патчах
Судя по ответам в этом вопросе главный специалист по фрэймам это pro100master.

ScopteRectuS, вам это для выбора героя нужно? Может опубликовать простенькую наработку на фрэймах, чтоб с тавернами не заморачиваться?
0
21
5 лет назад
0
NazarPunk, да там у меня всё простенько для конкретной карты:
раскрыть
BUILDING_GRAVE                                                      = FourCC( "h003" )
BUILDING_TAVERN = { 
    [0]                                                             = FourCC( "n000" ),
    [1]                                                             = FourCC( "n001" ),
    [2]                                                             = FourCC( "n002" ),
    [3]                                                             = FourCC( "n00A" ),
    [4]                                                             = FourCC( "n00B" ),
    [5]                                                             = FourCC( "n00C" )
}

function IsUnitTavern( whichUnit )
    return 
        GetUnitTypeId( whichUnit ) == BUILDING_TAVERN[0] or 
        GetUnitTypeId( whichUnit ) == BUILDING_TAVERN[1] or 
        GetUnitTypeId( whichUnit ) == BUILDING_TAVERN[2] or 
        GetUnitTypeId( whichUnit ) == BUILDING_TAVERN[3] or 
        GetUnitTypeId( whichUnit ) == BUILDING_TAVERN[4] or 
        GetUnitTypeId( whichUnit ) == BUILDING_TAVERN[5] 
end

function CreateTaverns( )
    tavern = {
        [0] = CreateUnit( NEUTRAL_PASSIVE_PLAYER, BUILDING_TAVERN[0], 7744.0, - 8256.0, 270.000 ),
        [1] = CreateUnit( NEUTRAL_PASSIVE_PLAYER, BUILDING_TAVERN[1], 8000.0, - 8256.0, 270.000 ),

        [2] = CreateUnit( NEUTRAL_PASSIVE_PLAYER, BUILDING_TAVERN[2], 7488.0, - 8512.0, 270.000 ),
        [3] = CreateUnit( NEUTRAL_PASSIVE_PLAYER, BUILDING_TAVERN[3], 8000.0, - 8000.0, 270.000 ),

        [4] = CreateUnit( NEUTRAL_PASSIVE_PLAYER, BUILDING_TAVERN[4], 8000.0, - 8512.0, 270.000 ),
        [5] = CreateUnit( NEUTRAL_PASSIVE_PLAYER, BUILDING_TAVERN[5], 7744.0, - 8512.0, 270.000 )
    }

    for i = 0, #tavern do
        SetUnitColor( tavern[i], ConvertPlayerColor( i ) )
        SetUnitPathing( tavern[i], false )
        SetUnitVertexColor( tavern[i], 0xFF, 0xFF, 0xFF, 0xA0 )

        ForForce( HEROES_FORCE, function( )
            UnitShareVision( tavern[i], GetEnumPlayer( ), true )
        end )
    end
end

function IsUnitHero( whichUnit )
    local isHero = false
    
    ForForce( HEROES_FORCE, function( )
        local id = GetPlayerId( GetEnumPlayer( ) )

        if hero[id] == whichUnit then
            isHero = true
        end
    end )

    return isHero
end

function IsHeroPicked( unitId )
    local isPicked = false
    
    ForForce( HEROES_FORCE, function( )
        local id = GetPlayerId( GetEnumPlayer( ) )

        if GetUnitTypeId( hero[id] ) == unitId then
            isPicked = true
        end
    end )

    return isPicked
end

function GetHeroStartX( whichPlayer )
--  Only for Player(1), Player(2), Player(3), Player(4), Player(5), Player(6).
    return  5312.0 + 256.0 * Cos( 3.5430 + 0.5585 * GetPlayerId( whichPlayer ) )
end
    
function GetHeroStartY ( whichPlayer )
--  Only for Player(1), Player(2), Player(3), Player(4), Player(5), Player(6).
    return -5568.0 + 256.0 * Sin( 3.5430 + 0.5585 * GetPlayerId( whichPlayer ) )
end
    
function GetHeroStartFacing( whichPlayer )
--  Only for Player(1), Player(2), Player(3), Player(4), Player(5), Player(6).
    return bj_RADTODEG * Atan2( GetUnitY( GetTown( ) ) - GetHeroStartY( whichPlayer ), GetUnitX( GetTown( ) ) - GetHeroStartX( whichPlayer ) )
end

function InitHeroPick( )
    hero = { }

    TriggerRegisterForceUnitEvent( CreateTrigger( ), NEUTRAL_PASSIVE_FORCE, EVENT_PLAYER_UNIT_SELL, nil, function( )
        if IsUnitTavern( GetSellingUnit( ) ) then
            local id = GetPlayerId( GetOwningPlayer( GetSoldUnit( ) ) )

            hero[id] = GetSoldUnit( )

            SetPlayerAlliance( NEUTRAL_PASSIVE_PLAYER, Player( id ), ALLIANCE_SHARED_CONTROL, false )

            ForForce( DEFENSIVE_FORCE, function( )
                SetPlayerTechMaxAllowed( GetEnumPlayer( ), GetUnitTypeId( hero[id] ), 0 )
            end )

            SetUnitX     ( hero[id], GetHeroStartX( Player( id ) ) )
            SetUnitY     ( hero[id], GetHeroStartY( Player( id ) ) )
            SetUnitFacing( hero[id], GetHeroStartFacing( Player( id ) ) )

            UnitAddAbility( hero[id], ABILITY_REINCARNATE )
            UnitAddAbility( hero[id], ABILITY_MOVESPEED_INC )
            UnitAddAbility( hero[id], ABILITY_ADDITIONAL_SKILLZ )
            UnitAddAbility( hero[id], ABILITY_TOWN_PORTAL )
            UnitAddAbility( hero[id], ABILITY_INVENTORY )

            SetUnitState( hero[id], UNIT_STATE_LIFE, GetUnitState( hero[id], UNIT_STATE_MAX_LIFE ) )
            SetUnitState( hero[id], UNIT_STATE_MANA, GetUnitState( hero[id], UNIT_STATE_MAX_MANA ) )

            if GetLocalPlayer( ) == Player( id ) then
                ClearSelection( )
                ClearTextMessages( )
                SelectUnit( hero[id], true )
                SetCameraPosition( GetUnitX( hero[id] ), GetUnitY( hero[id] ) )
            end
        end
    end )

    SuperTextPrinter( GetLocalPlayer( ), 12.0, "|cFFFFFF00P I C K   H E R O|r" )
    DisplayTimedTextToPlayer( GetLocalPlayer( ), 0.0, 0.0, 0.0, " " )
    DisplayTimedTextToPlayer( GetLocalPlayer( ), 0.0, 0.0, 0.0, "|cFF32CD32HINT|r - Choose the right character for your game. To complete the game, your team must have at least one hero from each class. For more information, click on the tavern you are interested in." )
--  DisplayTimedTextToPlayer( GetLocalPlayer( ), 0.0, 0.0, 0.0, "|cFFFED312Ability Power:|r  Ability Power гладиаторы в битве полагаются в основном на урон с заклинаний, при этом сами обладают небольшим количеством брони и здоровья." )
--  DisplayTimedTextToPlayer( GetLocalPlayer( ), 0.0, 0.0, 0.0, "|cFFFED312Attack Damage:|r  oписание находится в разработке." )
--  DisplayTimedTextToPlayer( GetLocalPlayer( ), 0.0, 0.0, 0.0, "|cFFFED312Support:|r  сами Support'ы по себе не сильны, однако очень полезны для команды. Они могут как лечить раненных в бою союзников, так и усиливать огневую мощь атакующих." )
--  DisplayTimedTextToPlayer( GetLocalPlayer( ), 0.0, 0.0, 0.0, "|cFFFED312Tank:|r  гладиаторы класса Tank отвлекают в бою внимание противника на себя, предотвращая нанесение урона слобозащищённым персонажам. Могут также перехватить часть повреждений, нацеленных на союзников. Для выполнения поставленных задач Tank'и имеют хорошую защиту и большой запас здоровья." )
    StartSound( questHintSound )
    SetCameraTargetController( tavern[0], 0.0, 0.0, false )

    ForForce( HEROES_FORCE, function( )
        SetPlayerAlliance( NEUTRAL_PASSIVE_PLAYER, GetEnumPlayer( ), ALLIANCE_SHARED_CONTROL, true )
    end )
end

function InitHeroTriggers( )
    InitHeroPick( )
    InitHeroRevive( )
    InitHeroExperience( )
end
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.