Retour à la leçon
Mission

Mission : des saccades inexpliquées à 60 FPS

Identifier les sources d'allocations et de coûts cachés dans une boucle de mise à jour exécutée chaque frame, et les corriger sans deviner à l'aveugle.

Contexte

Une boucle de mise à jour de jeu, exécutée 60 fois par seconde pour chaque entité, contient ce code :

lua
local function updateEntities(entities)
  local log = ""
  for _, entity in ipairs(entities) do
    local delta = { x = entity.vx * 0.016, y = entity.vy * 0.016 }   -- nouvelle table à CHAQUE entité, CHAQUE frame
    entity.x = entity.x + delta.x
    entity.y = entity.y + delta.y
    log = log .. entity.name .. " deplace; "     -- concaténation en boucle
    local d = math.sqrt(entity.x ^ 2 + entity.y ^ 2)   -- math.sqrt résolu en globale à chaque appel
  end
  return log
end

Sur un serveur avec plusieurs centaines d'entités, les joueurs signalent des saccades perceptibles, mais personne n'a encore mesuré où le temps est réellement passé.