Retour à la leçonMission
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
endSur 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é.