Jump to content

Animação de carregamento


Recommended Posts

  • Other Languages Moderators

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.]]

 

  • Thanks 1
Link to comment
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 by Matheus Schumann
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...