Packed arrays

In de bewegingscode gebruiken we PackedStringArray, PackedVector3Array en PackedInt32Array. Het basisidee is hetzelfde: een compacte reeks waarden van één bepaald type.

Niet elk lijsttype is hetzelfde

Een gewone Array is flexibel en kan verschillende waarden bevatten. Een getypeerde Array[Vector3] beperkt welke elementen je erin stopt. Een PackedVector3Array is een daarvoor speciaal opgeslagen reeks vectoren. Packed arrays kunnen minder geheugen en overhead vragen voor veel gelijksoortige gegevens.

GDScript Inhoud Voorbeeld
PackedStringArray Strings Configuratiewaarschuwingen.
PackedVector3Array 3D-vectoren Vertexposities.
PackedInt32Array 32-bit gehele getallen Meshindices.

Dat verschillende API’s zo’n type verwachten is geen reden om elke eigen lijst meteen packed te maken. Kies een representatie die bij de gegevens en de aangeroepen methode past.

Toevoegen of vooraf ruimte maken

Voor waarschuwingen is toevoegen overzichtelijk:

var warnings := PackedStringArray()
warnings.append("Voeg een XRCamera3D toe.")
string[] warnings = { "Voeg een XRCamera3D toe." };

De C#-binding gebruikt voor dit packed type een gewone string[]. Voor vertices en indices gebruik je in de besproken mesh-API respectievelijk Vector3[] en int[].

Ken je het eindformaat vooraf, dan kan je eerst resize() gebruiken en de bestaande plaatsen opvullen. Dat doet de ringgenerator met 2 * steps vertices en 6 * steps indices. Een element op index 5 schrijven vereist dat de array minstens 6 plaatsen heeft.

Die telling mag je niet verwarren met Mesh.ARRAY_MAX. De buitenste gewone array van een mesh bevat kanalen zoals vertexposities en indices. Binnen elk kanaal zit een eigen packed array met de werkelijke gegevens. Dat onderscheid staat uitgewerkt bij procedurele meshes.

Packed arrays zijn bovendien geen algemene garantie op onafhankelijke kopieën. Gebruik expliciete duplicatie wanneer je echt afzonderlijke data nodig hebt en controleer de API bij properties die een kopie teruggeven. Voor de cursus is het belangrijkste dat een passend arraytype en de correcte grootte vereist zijn.

Bron: Godot 4.5, PackedStringArray, PackedVector3Array en ArrayMesh.