top of page

DeltaTime – Corrigir movimento

O que é DeltaTime?

A PPTGames introduziu este conceito para o PowerPoint. Ele basicamente retorna o tempo em segundos da duração do frame anterior. No caso do PowerPoint (mais concretamente no VBA), dentro de um Loop ele retorna o tempo que demorou a executar a iteração anterior.

Para que pode ser útil?

O DeltaTime tem várias utilidades, mas neste tutorial falaremos apenas numa delas: corrigir o movimento de objetos no Slide.

O problema em movimentos

Antes de corrigirmos o problema, temos de o entender. Suponhamos que num jogo existe um objeto que se move enquanto o valor da Label1 estiver igual a "mover". Veja o exemplo abaixo.

Do While Label1.Caption = "mover"

Shapes("objeto").IncrementLeft 10

Shapes("atualizador").TextFrame.TextRange.Text = Time

DoEvents

Loop

NOTA: A parte mais importante, neste caso, do código foi destacada a negrito.

   Este código vai fazer o objeto se mover na horizontal a uma certa velocidade. Essa velocidade depende do valor que foi atribuído ao método IncrementLeft que neste caso é 10, mas não só. A velocidade também depende da velocidade do computador (do processador mais especificamente) de processar a alteração da posição do objeto. E a velocidade do processador depende do computador, do número de programas abertos, estado do computador, movimento do rato/mouse, entre outras. Ou seja, o objeto mover-se-à com velocidades diferentes em circunstâncias quase aleatórias e em computadores diferentes. Isto porque a função DoEvents pausa o código por um certo tempo, o tempo necessário para o processador processar tudo e capturar também a posição do rato/mouse, teclado, etc.

   Então basicamente temos de ter um tempo base que não tenha atrasos, que não espera pelo processador, para saltar as posições do objeto que não foi possível mostrar porque o processador demorou um pouco mais para processar. Antes de vermos a solução, recomendamos que transfira/baixe a apresentação de exemplo que mostra a diferença entre um código sem DeltaTime e um com DeltaTime. Clique no botão abaixo para a transferir/baixar e veja a diferença, pode mover o rato/mouse e depois parar para ver o que acontece.

Implementar o DeltaTime

   Para calcular o DeltaTime é muito fácil e rápido. Basta adicionar algumas linhas de código e fazer algumas alterações ao alterar a posição de um objeto. Como referido anteriormente, precisamos de um tempo base que não tenha atrasos. Felizmente o VBA tem uma função designada por Timer. Esta função retorna o número de segundos desde a meia noite. Isto é bastante útil para inúmeras coisas, mas para este exemplo usaremos apenas para o DeltaTime. Se subtrairmos o tempo de início com o tempo atual, obtemos a duração da execução entre o início e o fim. Em física isto é Δt (Δ é uma letra grega que representa na matemática e nas ciências representa a diferença entre duas variáveis). Neste caso será o tempo que a última iteração do Loop demorou a executar, como já explicado anteriormente.

   Se multiplicarmos por DeltaTime o valor a acrescentar à posição do objeto, corrigimos o problema. É tão simples assim. Mas precisamos obviamente de calcular o DeltaTime. O código é um exemplo anterior só que com o DeltaTime implementado.

Dim Timer0 As Double ' Tempo inicial

Dim DeltaTime As Double ' DeltaTime​

Do While Label1.Caption = "mover"

   Time0 = Timer

   Shapes("objeto").IncrementLeft 100 * DeltaTime

   Shapes("atualizador").TextFrame.TextRange.Text = Time

   DoEvents

   DeltaTime = Timer - Timer0

Loop

NOTA: As diferenças em relação ao código anterior a este foram destacadas a negrito.

Repare que o valor 10 foi substituído por 100 pois o DeltaTime diminui o valor. Mas com o DeltaTime a posição do objeto será alterada por um valor que depende da velocidade do processador e assim altera sempre de modo a que se o processador demorar mais, a posição será alterada por um valor maior para compensar.

bottom of page