Leerdoelen

Wat gaan we doen deze les:

Properties

Alle gebruikte objecten op de stage hebben properties (eigenschappen) Propeties die een object of instance heeft zijn:

Van een instance kunnen deze properties altijd gelezen en geschreven worden:

Voorbeeld

vierkant.x = 200;
var posx:Number = 300; //varibele gebruiken
vierkant.x = xpos; //varibele gebruiken om property te schrijven
var posx:Number = vierkant.x //property lezen en in een variabele schrijven;
posx = 0; //variabele veranderen

Inleiding Scripting

Als we aan het programmeren slaan dan doen we dit vanuit een aantal redenen.

  1. Programmeurs denken liever dan ze doen (je mag dit lui noemen)
  2. Computer zijn vele malen beter in doen van herhalings taken dan mensen.

Vooral als we systemen gaan bouwen die groot zijn (zeg een pagina of 100) dan is het handig dingen te automatiseren (dus scripten). Daarnaast kun je met scripts van allerlei dingen testen (Bijvoorbeeld of iemand wel een formuler naar behoren heeft ingevoerd! Bij de laatste komen if - else constructs naar voren. Scripten is het beschrijven wat een systeem moet doen aan de hand een programma of script wat je schrijft. Dit programma ook wel een afgoritme genoemd loopt staps gewijs allerlie belissingen af (aan de hand wat een gebruiker wil). Hier worden dus ook beslissingen gemaakt en ta dah: if - else constructs.

If statement

Wat is conditional construct (if)

Syntax if-statement

if ([condition]) {
[your cammand]
}

Voorbeeld met getallen:

Stel je wilt geld opnemen bij een pinautomaat controleert deze machine altijd of je wel genoeg op je rekening hebt

In pseudocode: In Script ziet de code er als volgt uit:
Het saldo is 440euro; Je wilt 500 euro opnemen;
Als u meer dan uw saldo euro wilt opnemen:
Toon bericht "saldo ontoereikend.";
var saldo:Number = 440;
var opname:Number = 500; if (opname > saldo) {
trace("saldo ontoereikend!");
}

Voorbeeld met booleans:

Als je geen mogelijkheid hebt om de hoeveelheid geld op je rekening uit te drukking in saldo dan zou je het ook kunnen doen met de uitdrukking "blut". Je bent blut of niet. Sommige mensen zien dit echter niet zo zwart wit). De automaat zou daar op kunnen testen.

var blut:Boolean = true;
if (blut == true) {
trace("saldo ontoereikend!");
}

Je kunt in dit geval '== true' weglaten, omdat de fuelEmpty al een boolean is (dit ziet er wellicht wat onleesbaar uit, maar ervaren programmeurs vinden het leuker om onleesbare code te schrijven, dat is namelijk lekker kort). De code ziet er dan als volgt uit:

var blut:Boolean = true;
if (blut) {
trace("saldo ontoereikend!");
}

Else

Je kunt een if-statement uitbreiden met een else-statement. Op deze wijze kun je de computer een stuk code laten uitvoeren als de conditie waar is en een ander stuk code laten uitvoeren als de conditie niet waar is.

Syntax

if ([condition]) {
[command if the condition is true]
} else {
[code to be executed if the condition is false]
}

Voorbeeld

In pseudocode: In Scriptvorm ziet de code er als volgt uit:
Je bent blut;
Als je blut bent:
Toon bericht 'Saldo ontoereikend.';
Anders:
Toon bericht 'Neem uw geld uit';
var blut = true;
if (blut) {
trace("saldo ontoereikend!");
} else {
trace("neem uw geld uit");
}

Ander Voorbeeld

Een gebruiker voert zijn naam in. We willen controleren of de gebruiker toegang heeft tot de site. De naam van de gebruiker die toegang heeft heet 'Zorro'.

In pseudocode:
Vraag de gebruiker om de gebruikersnaam in te voeren;
Als de gebruikersnaam gelijk is aan 'Zorro':
Toon bericht 'Welkom Zorro!';
Anders:
Toon bericht 'Sorry je hebt geen toegang!';

In Script ziet de code er als volgt uit:

var userName:String = textInst_name.text;
if (userName == "Zorro") {
trace('Welcome Zorro!');
} else {
trace('Sorry, access denied!');
}

Comparison operators

Zoals je al eerder hebt zien staan staat er een vergelijking in de conditie of test. Om condities te testen gebruik je comparison operators (vergelijkings operatoren):

= = is gelijk aan (LET OP dubbele "="
!= is NIET gelijk aan
> is groter dan
< is kleiner dan
<= is kleiner of gelijk aan
>= is groter of gelijk aan

Een voorbeeld metFlash properties

Stel je heb een MC (mc_Pos_c) op de stage en je wilt controleren wat de postitie van de MC. Indien hij op x=0 staat wil je deze verplaatsen naar 100, anders zet je hem naar 400.

In pseudocode: HetScript ziet de code er als volgtuit:
Lees uit wat de huidge positie van mijn movieclip is
Als de x-postitie gelijk is aan 0:
plaats de MC op x-positie = 100;
Anders:
Plaats de MC op x-positie = 400;
var xpos:Number = mc_Pos_c.x;
if (xpos == 0) {
mc_Pos_c.x = 100;
} else {
mc_Pos_c.x = 400;
}

Het bovenstaande voorbeeld kunnen we ook als volgt schrijven (dit is zoiets als een dubbele ontkenning, dus omslachtig en niet gebruikelijk):

var xpos:Number = mc_Pos_c.x;
if (xpos != 0) {
mc_Pos_c.x = 400;
} else {
mc_Pos_c.x = 100;
}

Als je nu een MC hebt die animeert door middel van een script dan wil je niet dat hij de stage uit animeert. Dat kun je dus onder vangen met test. Deze moet je dan genest gebruiken.

Om een mc te laten animeren moet je er voor zorgen dat het volgende script meerdere keren wordt uitgevoerd. Nadat je eerst de richting in frame 1 hebt geinitaliseerd.

//frame 1:
var xPos:Number = 0;
var xRichting:int = 1;
mc_Pos_c.x = xPos;

//frame 2: xPos = xPos + 10; // ophogen van de positie mc_Pos_c.x = xPos; //frame 3: gotoAndPlay (2);

Doordat in frame 2 de postitie verhoogt wordt zul je zien dat het geheel gaat bewegen omdat in frame 3 wordt verteld dat frame 2 moetgespeelde worden.

De MC heeft nu de neiging om de stage af te animeren. (de stage is 500px breedt en daar gaan we van uit). Als de positie van mc_Pos_c groter wordt dan de breedt van de stage willen we hem terug laten gaan. Dat doen we met de xRichting variabele. Als we het einde bereiken dan draaien we deze om (groter dan 500 -> richting wordt -1 en klein dan 0 -> riching wordt 1. Als we de richting nu verhogen met de ophoging dan wordt de ophoging als richting negatief is een verlaging. En voila.

Wat dus doen in frame 2 is een uitbreiding van het volgend....

//frame 2:
if (mc_Pos_c.x > 500){
	xRichting = -1;
}else{
	xRichting = 1;
}

xPos = xPos + xRichting*10; // ophogen of verlagen van de positie
mc_Pos_c.x = xPos;

Wat je nu ziet is dat het geheel waarschijnlijk in een soort clitch blijft hangen aan de rand. Dit kom doordat Flash precies doet wat je zegt. Als de postitie groter is dan 500 wordt de richting om gedraaid.

Het gevolg is dan dat de positie wordt gezet en weer lager wordt dan 500 wat als gevolg heeft dat de richting wordt omgedraaid.
Het gevolg is dan dat de positie wordt gezet en weer hoger wordt dan 500 wat als gevolg heeft dat de richting wordt omgedraaid.
....
Een loop dus. We zullen dit anders moeten oplossen. Gelukkig hebben we twee variabelen waar we op kunnen testen. De postie en de richting. Dit kunnen we doen met Logical operators

Logical operators

In dit geval wil je meerdere condities tegelijkertijd testen. Je kunt in dit geval logical operators gebruiken.

&& and beide condities moeten waar zijn
|| or één van de condities is waar
! not de conditie is niet waar

In ons voorbeeld

//frame 2:
if (mc_Pos_c.x > 500 && xRichting == 1){
	xRichting = -1;
}
if(mc_Pos_c.x < 100 && xRichting == -1){
	xRichting = 1;
}

xPos = xPos + xRichting*10; // ophogen of verlagen van de positie
mc_Pos_c.x = xPos;

Let op met het gebruik van de comparison operator == (is gelijk aan). Als een conditional statement niet werkt zoals je zou verwachten, controleer dan of je niet per ongeluk een enkel '=' teken hebt gebruikt als vergelijkings operator.

Ander voorbeeld

Stel dat naast Zorro dat ook Diana toegang heeft tot de website (leeftijd doet er even niet toe). Zie dat in de alert, de variable userName wordt gebruikt (zo zal zowel Zorro als Diana een eigen welkomstbericht krijgen).

var userName:String;
if (userName == 'Zorro' || userName == 'Diana') {
trace('Welcome ' + userName);
} else {
trace('Sorry, access denied!');
}

Een fout die veel beginners maken, is dat de tweede conditie niet goed wordt uitgeschreven. De volgende code is daarom fout!

var userName = prompt('Enter your user-name', '');
if (userName == 'Zorro' || 'Diana') {
trace('Welcome ' + userName);
} else {
trace('Sorry, access denied!');
}

Zowel Zorro als Diana hebben toegang tot de website, maar beide dienen wel 18 jaar of ouder te zijn. Je kunt dan een combinatie maken van 'and' en 'or'. Om er zeker van te zijn dat de juiste condities worden getest, kun je het beste de verschillende tests tussen haakjes zetten.

var userName:String;
var age:int;
if ((userName == 'Zorro' || userName == 'Diana') && age >= 18) {
alert('Welcome ' + userName);
} else {
alert('Sorry, access denied!');
}

Truth tables

q p q && p
True True True
True False False
False True False
False False False
q p q or p
True True True
True False True
False True True
False False False
q p q and !p
True True False
True False True
False True False
False False False
q p !(q and !p)
True True True
True False False
False True True
False False True

True table's geven een overzicht van het werken met TRUE en FALSE. Er staat nu boven in deze tabellen een p en een q. Deze kan je vervangen voor een willekeurige conditie, zoals je die in een conditional statement gebruikt.