Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Animação de propriedade

Todas as propriedades numéricas (números, vector3, vector4 e quaternions) e constantes de shader podem ser animadas com o sistema de animação integrado, usando a função go.animate(). A engine fará automaticamente o “tween” das propriedades de acordo com os modos de reprodução e funções de easing fornecidos. Você também pode especificar funções de easing personalizadas.

Property animation Bounce loop

Animação de propriedade

Para animar uma propriedade de objeto de jogo ou componente, use a função go.animate(). Para propriedades de nodes de GUI, a função correspondente é gui.animate().

-- Define o componente y da propriedade position para 200
go.set(".", "position.y", 200)
-- Então o anima
go.animate(".", "position.y", go.PLAYBACK_LOOP_PINGPONG, 100, go.EASING_OUTBOUNCE, 2)

Para parar todas as animações de uma determinada propriedade, chame go.cancel_animations(), ou, para nodes de GUI, gui.cancel_animation():

-- Para a animação de rotação euler z no objeto de jogo atual
go.cancel_animations(".", "euler.z")

Se você cancelar a animação de uma propriedade composta, como position, quaisquer animações dos subcomponentes (position.x, position.y e position.z) também serão canceladas.

O manual de Propriedades contém todas as propriedades disponíveis em objetos de jogo, componentes e nodes de GUI.

Animação de propriedades de nodes de GUI

Quase todas as propriedades de nodes de GUI podem ser animadas. Você pode, por exemplo, tornar um node invisível definindo sua propriedade color como totalmente transparente e então fazê-lo aparecer animando a cor para branco (isto é, sem cor de tint).

local node = gui.get_node("button")
local color = gui.get_color(node)
-- Anima a cor para branco
gui.animate(node, gui.PROP_COLOR, vmath.vector4(1, 1, 1, 1), gui.EASING_INOUTQUAD, 0.5)
-- Anima o componente vermelho da cor de contorno
gui.animate(node, "outline.x", 1, gui.EASING_INOUTQUAD, 0.5)
-- E move para a posição x 100
gui.animate(node, hash("position.x"), 100, gui.EASING_INOUTQUAD, 0.5)

Callbacks de conclusão

As funções de animação de propriedade go.animate() e gui.animate() aceitam uma função de callback Lua opcional como último argumento. Essa função será chamada quando a animação for reproduzida até o fim. A função nunca é chamada para animações em loop, nem quando uma animação é cancelada manualmente via go.cancel_animations() ou gui.cancel_animation(). O callback pode ser usado para disparar eventos na conclusão da animação ou para encadear várias animações.

Easing

Easing define como o valor animado muda ao longo do tempo. As imagens abaixo descrevem as funções aplicadas ao longo do tempo para criar o easing.

Os seguintes valores de easing são válidos para go.animate():

go.EASING_LINEAR  
go.EASING_INBACK go.EASING_OUTBACK
go.EASING_INOUTBACK go.EASING_OUTINBACK
go.EASING_INBOUNCE go.EASING_OUTBOUNCE
go.EASING_INOUTBOUNCE go.EASING_OUTINBOUNCE
go.EASING_INELASTIC go.EASING_OUTELASTIC
go.EASING_INOUTELASTIC go.EASING_OUTINELASTIC
go.EASING_INSINE go.EASING_OUTSINE
go.EASING_INOUTSINE go.EASING_OUTINSINE
go.EASING_INEXPO go.EASING_OUTEXPO
go.EASING_INOUTEXPO go.EASING_OUTINEXPO
go.EASING_INCIRC go.EASING_OUTCIRC
go.EASING_INOUTCIRC go.EASING_OUTINCIRC
go.EASING_INQUAD go.EASING_OUTQUAD
go.EASING_INOUTQUAD go.EASING_OUTINQUAD
go.EASING_INCUBIC go.EASING_OUTCUBIC
go.EASING_INOUTCUBIC go.EASING_OUTINCUBIC
go.EASING_INQUART go.EASING_OUTQUART
go.EASING_INOUTQUART go.EASING_OUTINQUART
go.EASING_INQUINT go.EASING_OUTQUINT
go.EASING_INOUTQUINT go.EASING_OUTINQUINT

Os seguintes valores de easing são válidos para gui.animate():

gui.EASING_LINEAR  
gui.EASING_INBACK gui.EASING_OUTBACK
gui.EASING_INOUTBACK gui.EASING_OUTINBACK
gui.EASING_INBOUNCE gui.EASING_OUTBOUNCE
gui.EASING_INOUTBOUNCE gui.EASING_OUTINBOUNCE
gui.EASING_INELASTIC gui.EASING_OUTELASTIC
gui.EASING_INOUTELASTIC gui.EASING_OUTINELASTIC
gui.EASING_INSINE gui.EASING_OUTSINE
gui.EASING_INOUTSINE gui.EASING_OUTINSINE
gui.EASING_INEXPO gui.EASING_OUTEXPO
gui.EASING_INOUTEXPO gui.EASING_OUTINEXPO
gui.EASING_INCIRC gui.EASING_OUTCIRC
gui.EASING_INOUTCIRC gui.EASING_OUTINCIRC
gui.EASING_INQUAD gui.EASING_OUTQUAD
gui.EASING_INOUTQUAD gui.EASING_OUTINQUAD
gui.EASING_INCUBIC gui.EASING_OUTCUBIC
gui.EASING_INOUTCUBIC gui.EASING_OUTINCUBIC
gui.EASING_INQUART gui.EASING_OUTQUART
gui.EASING_INOUTQUART gui.EASING_OUTINQUART
gui.EASING_INQUINT gui.EASING_OUTQUINT
gui.EASING_INOUTQUINT gui.EASING_OUTINQUINT

Linear interpolation In back Out back In-out back Out-in back In bounce Out bounce In-out bounce Out-in bounce In elastic Out elastic In-out elastic Out-in elastic In sine Out sine In-out sine Out-in sine In exponential Out exponential In-out exponential Out-in exponential In circlic Out circlic In-out circlic Out-in circlic In quadratic Out quadratic In-out quadratic Out-in quadratic In cubic Out cubic In-out cubic Out-in cubic In quartic Out quartic In-out quartic Out-in quartic In quintic Out quintic In-out quintic Out-in quintic

Easing personalizado

Você pode criar curvas de easing personalizadas definindo um vector com um conjunto de valores e então fornecendo o vector em vez de uma das constantes de easing predefinidas acima. Os valores do vector expressam uma curva do valor inicial (0) ao valor-alvo (1). O runtime amostra valores do vector e interpola linearmente ao calcular valores entre os pontos expressos no vector.

Por exemplo, o vector:

local values = { 0, 0.4, 0.2, 0.2, 0.5, 1 }
local my_easing = vmath.vector(values)

produz a seguinte curva:

Custom curve

O exemplo a seguir faz a posição y de um objeto de jogo saltar entre a posição atual e 200 de acordo com uma curva quadrada:

local values = { 0, 0, 0, 0, 0, 0, 0, 0,
                 1, 1, 1, 1, 1, 1, 1, 1,
                 0, 0, 0, 0, 0, 0, 0, 0,
                 1, 1, 1, 1, 1, 1, 1, 1,
                 0, 0, 0, 0, 0, 0, 0, 0,
                 1, 1, 1, 1, 1, 1, 1, 1,
                 0, 0, 0, 0, 0, 0, 0, 0,
                 1, 1, 1, 1, 1, 1, 1, 1 }
local square_easing = vmath.vector(values)
go.animate("go", "position.y", go.PLAYBACK_LOOP_PINGPONG, 200, square_easing, 2.0)

Square curve