Nome Nome Posted April 24, 2020 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
Nome Nome Posted April 24, 2020 Author 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 ?
Other Languages Moderators Lord Henry Posted April 24, 2020 Other Languages Moderators 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
Nome Nome Posted April 25, 2020 Author 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
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