Aller au contenu principal
ShadowAcademy

Les langages Optimisation FiveM Ce que coûte une boucle

Lire une fois, s'en servir plusieurs

GetEntityCoords, PlayerPedId, GetVehiclePedIsIn... Ces fonctions, les natives, franchissent la frontière entre Lua et le moteur du jeu. Chaque appel coûte plus cher qu'une simple lecture de variable.

Le travers classique

for _, point in ipairs(POINTS) do
    if #(GetEntityCoords(PlayerPedId()) - point) < 10.0 then
        -- ...
    end
end

Avec trois points, la position du joueur est lue trois fois -- et PlayerPedId appelé trois fois -- alors qu'elle ne change pas pendant ce tour de boucle. Avec cinquante points, cinquante fois.

La correction

local pos = GetEntityCoords(PlayerPedId())   -- une fois par tour
for _, point in ipairs(POINTS) do
    if #(pos - point) < 10.0 then
        -- ...
    end
end

La position est lue une fois par tour de boucle : ni plus (gaspillage), ni moins. La lire une seule fois avant la boucle serait l'excès inverse : le joueur se déplace, et le script travaillerait sur une position périmée.

1 exercice pour cette lecon

Les exercices demandent un compte : il faut bien enregistrer votre progression quelque part. La lecture, elle, reste libre. Creer un compte

  • Une seule lecture par tour facile lecon a valider