BeYourself Posted June 22, 2015 Share Posted June 22, 2015 (edited) 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 June 25, 2015 by Guest Link to comment
n3wage Posted June 22, 2015 Share Posted June 22, 2015 Defina uma variável global (com o valor 0) que irá salvar o alpha e a cada frame (onClientRender) aumente o valor dela, Você tambem pode usar a função interpolateBetween para isso. Link to comment
BeYourself Posted June 22, 2015 Author Share Posted June 22, 2015 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
n3wage Posted June 22, 2015 Share Posted June 22, 2015 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
BeYourself Posted June 23, 2015 Author Share Posted June 23, 2015 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
DNL291 Posted June 24, 2015 Share Posted June 24, 2015 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
BeYourself Posted June 24, 2015 Author Share Posted June 24, 2015 Primeiramente, obrigado pelo código vai ser muito útil. Fui testar no meu server teste e deu erro nas linhas 36 e 37, na parte do dxDrawRectangle. Abaixo o print do debug: http://prntscr.com/7ktbi3 Link to comment
n3wage Posted June 24, 2015 Share Posted June 24, 2015 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
BeYourself Posted June 25, 2015 Author Share Posted June 25, 2015 Muito obrigado DNL291 pelo código, e NewAge pela explicação do alpha. Vocês não sabem como isso vai me ajudar, já entendi perfeitamente o conceito de interpolateBetween. Valeu, de coração Link to comment
DNL291 Posted June 25, 2015 Share Posted June 25, 2015 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 . BeYourself: De nada. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now