Nome Nome Posted April 24, 2020 Share Posted April 24, 2020 (edited) Como posso fazer uma animação de carregamento nesse estilo? Eu estou aprendendo Lua então, você pode ajudar no agradeço. . Edited April 24, 2020 by Matheus Schumann Link to comment
Nome Nome Posted April 24, 2020 Author Share Posted April 24, 2020 7 hours ago, Matheus Schumann said: Como posso fazer uma animação de carregamento nesse estilo? Eu estou aprendendo Lua então, você pode ajudar no agradeço. . Movimentando o topico. Alguem pra da uma força ? Link to comment
Other Languages Moderators Lord Henry Posted April 24, 2020 Other Languages Moderators Share Posted April 24, 2020 Vc vai precisar ter 1 imagem de cada frame da "animação". No caso uma imagem com aquele quadrado branco em cada posição. (se eu contei certo, 9 imagens) Depois vc coloca todas as imagens em uma table. Com uma variável de contador, vc usa como iterador para mostrar uma imagem diferente a cada frame, em sequência. E claro, um onClientRender pra manter tudo visível na tela. loadingTextures = { -- As imagens precisam estar declaradas no meta.xml. Se for colocar dentro de uma pasta dentro do resource, a pasta precisa estar declarada também. Ex: imagens/loading1.png dxCreateTexture("loading1.png", "dxt1", true), -- Os nomes não importam, mas cada imagem precisa estar na ordem correta nessa table. dxCreateTexture("loading2.png", "dxt1", true), -- Imagem 2. Pode ser acessada com loadingTextures[2] dxCreateTexture("loading3.png", "dxt1", true), -- Imagem 3. dxCreateTexture("loading4.png", "dxt1", true), -- E assim por diante. dxCreateTexture("loading5.png", "dxt1", true), dxCreateTexture("loading6.png", "dxt1", true), -- dxt1 indica compressão máxima da imagem. A qualidade só fica terrível se houver transparência. dxCreateTexture("loading7.png", "dxt1", true), -- O true indica o uso de MipMaps. A imagem fica boa mesmo se for desenhada em vários tamanhos. dxCreateTexture("loading8.png", "dxt1", true), dxCreateTexture("loading9.png", "dxt1", true), -- Imagem 9. } local contador = 1 -- Variável qualquer que vai variar de 1 até #loadingTextures (9). local x, y = guiGetScreenSize() -- x, y recebem a resolução do jogador. Ex: x = 1920, y = 1080. function renderLoading () if (contador <= #loadingTextures) then -- Se o contador for menor ou igual a 9, então: dxDrawImage (0, 0, x, y, loadingTextures[contador]) -- Desenha em tela cheia a imagem que está no loadingTextures[contador]. else contador = 1 -- Reinicia o contador, pois ao chegar aqui, contador seria igual a 10, mas não existe a imagem 10 na sequência. dxDrawImage (0, 0, x, y, loadingTextures[contador]) -- Desenha em tela cheia a primeira imagem da sequência. end contador = contador + 1 -- Antes de passar pro frame seguinte, aumenta o contador em +1. end addCommandHandler ("loading", function (cmd) -- Comando para testes, faz aparecer/sumir a tela de loading em quem usou o comando. if (isRendering) then removeEventHandler ("onClientRender", root, renderLoading) else addEventHandler ("onClientRender", root, renderLoading) end isRendering = not isRendering -- A variável isRendering fica alternando entre True e False a cada vez que o jogador usa /loading end) --[[OBS: Sim, você pode declarar o nome da imagem direto no dxDrawImage, mas seria mais pesado e você teria que fazer gambiarras pra chamar diferentes imagens a cada frame, uma vez que os nomes seriam diferentes. Vale lembrar que onClientRender executa uma vez a cada frame, ou seja, várias vezes por segundo. Não há tempo para ficar carregando e descarregando arquivos. Outra coisa: Recomendo que use imagens em Full HD, pois imagens pequenas irão distorcer bastante se o jogador estiver usando resoluções maiores. A não ser que você não se importe com isso.]] 1 Link to comment
Nome Nome Posted April 25, 2020 Author Share Posted April 25, 2020 (edited) 16 hours ago, Lord Henry said: Vc vai precisar ter 1 imagem de cada frame da "animação". No caso uma imagem com aquele quadrado branco em cada posição. (se eu contei certo, 9 imagens) Depois vc coloca todas as imagens em uma table. Com uma variável de contador, vc usa como iterador para mostrar uma imagem diferente a cada frame, em sequência. E claro, um onClientRender pra manter tudo visível na tela. loadingTextures = { -- As imagens precisam estar declaradas no meta.xml. Se for colocar dentro de uma pasta dentro do resource, a pasta precisa estar declarada também. Ex: imagens/loading1.png dxCreateTexture("loading1.png", "dxt1", true), -- Os nomes não importam, mas cada imagem precisa estar na ordem correta nessa table. dxCreateTexture("loading2.png", "dxt1", true), -- Imagem 2. Pode ser acessada com loadingTextures[2] dxCreateTexture("loading3.png", "dxt1", true), -- Imagem 3. dxCreateTexture("loading4.png", "dxt1", true), -- E assim por diante. dxCreateTexture("loading5.png", "dxt1", true), dxCreateTexture("loading6.png", "dxt1", true), -- dxt1 indica compressão máxima da imagem. A qualidade só fica terrível se houver transparência. dxCreateTexture("loading7.png", "dxt1", true), -- O true indica o uso de MipMaps. A imagem fica boa mesmo se for desenhada em vários tamanhos. dxCreateTexture("loading8.png", "dxt1", true), dxCreateTexture("loading9.png", "dxt1", true), -- Imagem 9. } local contador = 1 -- Variável qualquer que vai variar de 1 até #loadingTextures (9). local x, y = guiGetScreenSize() -- x, y recebem a resolução do jogador. Ex: x = 1920, y = 1080. function renderLoading () if (contador <= #loadingTextures) then -- Se o contador for menor ou igual a 9, então: dxDrawImage (0, 0, x, y, loadingTextures[contador]) -- Desenha em tela cheia a imagem que está no loadingTextures[contador]. else contador = 1 -- Reinicia o contador, pois ao chegar aqui, contador seria igual a 10, mas não existe a imagem 10 na sequência. dxDrawImage (0, 0, x, y, loadingTextures[contador]) -- Desenha em tela cheia a primeira imagem da sequência. end contador = contador + 1 -- Antes de passar pro frame seguinte, aumenta o contador em +1. end addCommandHandler ("loading", function (cmd) -- Comando para testes, faz aparecer/sumir a tela de loading em quem usou o comando. if (isRendering) then removeEventHandler ("onClientRender", root, renderLoading) else addEventHandler ("onClientRender", root, renderLoading) end isRendering = not isRendering -- A variável isRendering fica alternando entre True e False a cada vez que o jogador usa /loading end) --[[OBS: Sim, você pode declarar o nome da imagem direto no dxDrawImage, mas seria mais pesado e você teria que fazer gambiarras pra chamar diferentes imagens a cada frame, uma vez que os nomes seriam diferentes. Vale lembrar que onClientRender executa uma vez a cada frame, ou seja, várias vezes por segundo. Não há tempo para ficar carregando e descarregando arquivos. Outra coisa: Recomendo que use imagens em Full HD, pois imagens pequenas irão distorcer bastante se o jogador estiver usando resoluções maiores. A não ser que você não se importe com isso.]] Ajudou muito. Obrigado. Edited April 25, 2020 by Matheus Schumann 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