Jump to content

[RESOLVIDO] Dx com animação


Recommended Posts

Eae galera, beleza?

Bom, o título do tópico deve confundir um pouco, pois vocês podem pensar que eu estou querendo saber como usa o dxDrawAnimWindow. Mas não, eu quero saber como faz pra mover, escurecer (ou ir aparecendo conforme o alpha)(r,g,b,alpha), essas coisas... mas não sei nem por onde começar.

Edited by Guest
Link to comment

Sobre o alpha entendi perfeitamente, mas o interpolateBetween é meio difícil :/ Eu baixei um painel da community e vi isso '-'

function showFunction ( ) 
    local now = getTickCount(); 
    local elapsedTime = now - info.startTime; 
    local duration = timer; 
    local progress = elapsedTime / duration; 
  
    _, alpha, x = interpolateBetween (  
        0, alpha, x, 
        0, 200, sx - 350,  
        progress, 'InOutQuad'); 
end; 
  
function hideFunction ( ) 
    local now = getTickCount(); 
    local elapsedTime = now - info.startTime; 
    local duration = timer; 
    local progress = elapsedTime / duration; 
  
    _, alpha, x = interpolateBetween (  
        0, alpha, x,  
        0, 100, sx - 50, 
        progress, 'InOutQuad') 
end; 

Link to comment

Não precisa usar interpolateBetween, da pra fazer com variaveis, igual falei ali acima ↑

alpha = 0  -- Variavel que ira ser o alpha 
  
function sua_funcao_de_renderizar ( ) 
    if alpha < 255 then -- se a variavel alpha for menor que 255 (o maximo) 
        alpha = alpha + 1 -- aumentar alpha, vc pode usar 0.5, 0.2 etc se quiser uma animação mais lenta 
    end 
     
    local cor = tocolor ( 255, 255, 255, alpha ) -- cor branca com o alpha (exemplo) 
end 
addEventHandler ( "onClientRender", root, sua_funcao_de_renderizar ) 

Link to comment

Muito Obrigado NewAge!

Bom, você disse que pra fazer o alpha ir aparecendo é só usar uma variável ( local var = 0 ) e usar essa função que tu mandou ai em cima, já fiz deu certo!! E eu queria saber se tem como fazer isso com o " x e y " do DX. Pra ele mover de um determinado lugar até o outro, exemplo: do lado direito da tela até o meio...

Link to comment

Fiz um exemplo pra mover um retângulo com um texto nele, dá uma olhada no código abaixo pra ver como funciona.

Pode ser que tenha pequenos erros, até porque escrevi direto, sem testar.

  
local sw, sh = guiGetScreenSize() 
local g_dx = {} 
local offset = 0 -- Se não quiser encostado no canto direito só aumentar 
g_dx.width, g_dx.height = 250, 300 -- Largura e altura do retângulo-dx 
g_dx.from = { sw - (g_dx.width + offset), 0 } 
g_dx.to = { (sw - g_dx.width)/2, (sh - g_dx.height)/2 } -- mover para o centro da tela 
-- 
g_dx.left, g_dx.top = g_dx.from[1], g_dx.from[2] 
  
-- Mostrar o retângulo e o texto a cada frame 
addEventHandler("onClientRender", root, drawDX) 
  
addCommandHandler( "moverdx", 
    function() 
        if g_dx.startTime then return end; 
        g_dx.startTime = getTickCount() 
        g_dx.endTime = g_dx.startTime + 1000 -- Aqui você define o tempo pra animação 
        addEventHandler("onClientRender", root, renderAnimation) 
    end 
) 
  
function renderAnimation() 
    local now = getTickCount() 
    local elapsedTime = now - g_dx.startTime 
    local duration = g_dx.endTime - g_dx.startTime 
    g_dx.left, g_dx.top = interpolateBetween(g_dx.from[1],g_dx.from[2],0, g_dx.to[1],g_dx.to[2],0, progress, "InQuad") 
     
    -- Quando o tempo para a animação acabar, 
    -- não será mais executada essa função 
    if (now > g_dx.endTime) then 
        removeEventHandler("onClientRender", root, renderAnimation) 
        g_dx.startTime = nil 
    end 
end 
  
function drawDX() 
    dxDrawRectangle( g_dx.left, g_dx.top, g_dx.width, g_dx.height, tocolor(0,0,0, 180) ) 
    dxDrawText( "Texto para animação DX", g_dx.left, g_dx.top, g_dx.left + g_dx.width, g_dx.top + dxGetFontHeight(2,"default-bold"), 
                tocolor(230, 230, 230), 2, "default-bold", "center", "center" ) 
end 
  

Em g_dx.width e g_dx.height você vai definir as posições iniciais (que é a largura e altura) para o DX.

Com o comando moverdx o código vai fazer o retângulo e o texto moverem-se para o centro da sua tela.

Leia os comentários no código, que você vai entender mais.

vc pode usar 0.5, 0.2 etc se quiser uma animação mais lenta

O argumento alpha só aceita números inteiros, mas acho que foi só um engano seu.

Link to comment
local sw, sh = guiGetScreenSize() 
local g_dx = {} 
local offset = 0 -- Se não quiser encostado no canto direito só aumentar 
g_dx.width, g_dx.height = 250, 300 -- Largura e altura do retângulo-dx 
g_dx.from = { sw - (g_dx.width + offset), 0 } 
g_dx.to = { (sw - g_dx.width)/2, (sh - g_dx.height)/2 } -- mover para o centro da tela 
-- 
g_dx.left, g_dx.top = g_dx.from[1], g_dx.from[2] 
  
addCommandHandler( "moverdx", 
    function() 
        if g_dx.startTime then return end; 
        g_dx.startTime = getTickCount() 
        g_dx.endTime = g_dx.startTime + 1000 -- Aqui você define o tempo pra animação 
        addEventHandler("onClientRender", root, renderAnimation) 
    end 
) 
  
function renderAnimation() 
    local now = getTickCount() 
    local elapsedTime = now - g_dx.startTime 
    local duration = g_dx.endTime - g_dx.startTime 
    local progress = elapsedTime / duration 
    g_dx.left, g_dx.top = interpolateBetween(g_dx.from[1],g_dx.from[2],0, g_dx.to[1],g_dx.to[2],0, progress, "InQuad") 
    
    -- Quando o tempo para a animação acabar, 
    -- não será mais executada essa função 
    if (now > g_dx.endTime) then 
        removeEventHandler("onClientRender", root, renderAnimation) 
        g_dx.startTime = nil 
    end 
end 
  
function drawDX() 
    dxDrawRectangle( g_dx.left, g_dx.top, g_dx.width, g_dx.height, tocolor(0,0,0, 180) ) 
    dxDrawText( "Texto para animação DX", g_dx.left, g_dx.top, g_dx.left + g_dx.width, g_dx.top + dxGetFontHeight(2,"default-bold"), 
    tocolor(230, 230, 230), 2, "default-bold", "center", "center" ) 
end 
  
-- Mostrar o retângulo e o texto a cada frame 
addEventHandler("onClientRender", root, drawDX) 

@DNL

Sim eu sei disto, por isso falei que ele poderia usar números decimais, pois enquanto o numero inteiro não mudar, o alpha continuará sendo igual, deixando assim a animação mais lenta.

Link to comment
Sim eu sei disto, por isso falei que ele poderia usar números decimais, pois enquanto o numero inteiro não mudar, o alpha continuará sendo igual, deixando assim a animação mais lenta.

Pensei que tinha sido um equivoco, então foi eu que entendi errado :P .

BeYourself: De nada.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...