Hier heb je nu eigenlijk 12 lijntjes die puur herhaling zijn. En bij programmeren weet je: herhaling is (meestal) niet goed en kan je meestal wegwerken!
Drie keer raden wat we hiervoor kunnen gebruiken Arrays!
Een array is eigenlijk gewoon een reeks variabelen. Bij een array kun je dus gemakkelijk een aantal variabelen aanspreken. Hiervoor gebruik je een basis variabele, en een index variabele:
1@ = 4
20@(1@,1i) = 3
In bovenstaand voorbeeld is 20@ de basis variabele en 1@ de index variabele. Dit wilt zeggen dat je variabele (20+index) zal aanpassen, in dit voorbeeld zal dus de waarde 3 zitten in 24@.
Je kan trouwens ook een negatieve index gebruiken, iets wat veel programmeertalen niet leuk vinden.
Je ziet ook die '1i' staan. Naast de index moet je de grootte van de array geven, en het datatype van de elementen (dit bepaald hoeveel bytes (plaats) elk element inneemt). De grootte maakt eigenlijk niet uit, je moet gewoon een nummer > 0 gebruiken. Voor het type moet je een teken gebruiken:
Nu kunnen we de code uit het oorspronkelijke voorbeeld korter maken:
20@ = 2460.1829
for 0@ = 0 to 6
009A: 10@(0@,1i) = create_actor_pedtype 4 model #MALE01 at 20@ -1655.1241 13.3359
0634: AS_actor 10@(0@,1i) attack_using_weapon_actor $PLAYER_ACTOR flags 7 perform_actions_after_time 2000 chance_of_action 100
20@ += 5.0
end
De uitwerking is exact hetzelfde, nu zitten die actoren nog steeds in variabelen 10@ t.e.m. 16@, maar je hebt er minder code voor gebruikt.
Voorbeeld 2
De array notatie is ook perfect voor wanneer je bijvoorbeeld een willekeurig doelwit wilt hebben:
// in variabelen 10@ tot 14@ zitten allemaal auto's
// nu wil je 1 ervan als doelwit hebben
0209: 0@ = random_int_in_ranges 0 6 // resultaat is 0 - 5
0085: 1@ = 10@(0@,1i)
// doelwit auto zit nu ook in 1@
0186: 2@ = create_marker_above_car 1@
Alternatieve notatie
In sannybuilder kan je ook een andere notatie gebruiken, één die misschien beter gekend is door mensen die al in andere talen met arrays gewerkt hebben:
var
20@: array 5 of Integer
end
1@ = 4
20@[1@] = 3
Bij deze notatie kan je zelf een index specifiëren zonder een variabele te gebruiken, maar dit kan enkel bij globale variabelen:
var
$actors: array 5 of Integer
end
$actors[2] = 3
Bewerkt: door robin_be correctie eerste codevoorbeeldje alternatieve notatie
Arrays
In deze tutorial leg ik uit hoe je met arrays kunt werken in SCM.
Benodigdheden
GTA:SA en Sannybuilder
basis SCM-kennis (Basis SCM-scripten: tutorial door @Dutchy3010 & @PatrickW)
---------------------------
Arrays
Stel dat je een aantal actors maakt in je script, en je wilt dat die de speler aanvallen. Dit kun je zo doen:
(eerst natuurlijk wel het #MALE01 model laden)
Hier heb je nu eigenlijk 12 lijntjes die puur herhaling zijn. En bij programmeren weet je: herhaling is (meestal) niet goed en kan je meestal wegwerken!
Drie keer raden wat we hiervoor kunnen gebruiken
Arrays!
Een array is eigenlijk gewoon een reeks variabelen. Bij een array kun je dus gemakkelijk een aantal variabelen aanspreken. Hiervoor gebruik je een basis variabele, en een index variabele:
1@ = 4 20@(1@,1i) = 3
In bovenstaand voorbeeld is 20@ de basis variabele en 1@ de index variabele. Dit wilt zeggen dat je variabele (20+index) zal aanpassen, in dit voorbeeld zal dus de waarde 3 zitten in 24@.
Je kan trouwens ook een negatieve index gebruiken, iets wat veel programmeertalen niet leuk vinden.
Je ziet ook die '1i' staan. Naast de index moet je de grootte van de array geven, en het datatype van de elementen (dit bepaald hoeveel bytes (plaats) elk element inneemt). De grootte maakt eigenlijk niet uit, je moet gewoon een nummer > 0 gebruiken. Voor het type moet je een teken gebruiken:
i: integer 4 bytes
f: float, 4 bytes
s: shortstring, 8 bytes
v: longstring, 16 bytes
Meestal zul je dus i of f gebruiken.
Voorbeeld 1
Nu kunnen we de code uit het oorspronkelijke voorbeeld korter maken:
De uitwerking is exact hetzelfde, nu zitten die actoren nog steeds in variabelen 10@ t.e.m. 16@, maar je hebt er minder code voor gebruikt.
Voorbeeld 2
De array notatie is ook perfect voor wanneer je bijvoorbeeld een willekeurig doelwit wilt hebben:
Alternatieve notatie
In sannybuilder kan je ook een andere notatie gebruiken, één die misschien beter gekend is door mensen die al in andere talen met arrays gewerkt hebben:
var 20@: array 5 of Integer end 1@ = 4 20@[1@] = 3
Bij deze notatie kan je zelf een index specifiëren zonder een variabele te gebruiken, maar dit kan enkel bij globale variabelen:
Bewerkt: door robin_be
correctie eerste codevoorbeeldje alternatieve notatie