Programmering 1 med ActionScript 3.0 100 poa ng



Relevanta dokument
Användarhandledning Version 1.2

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Föreläsning 5-6 Innehåll

TUTORIAL: KLASSER & OBJEKT

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

Laboration 1 Introduktion till Visual Basic 6.0

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

public class Main extends MovieClip { var hillpage:hillpage; var ifpage:ifpage;

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

TDIU01 - Programmering i C++, grundkurs

Laboration 1 - Grunderna för OOP i Java

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

NetBeans 7. Avsikt. Projektfönster

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

NetBeans 5.5. Avsikt. Projektfönster

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Att använda pekare i. C-kod

Lab5 för prgmedcl04 Grafik

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Tentamen OOP

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Extramaterial till Matematik Y

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

JAVA Mer om klasser och objektorientering

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Java, klasser, objekt (Skansholm: Kapitel 2)

Föreläsning 3-4 Innehåll

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Variabler och konstanter

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Objektorienterad programmering

F4. programmeringsteknik och Matlab

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

Grundläggande programmering med C# 7,5 högskolepoäng

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Klasser och objekt. Henrik Johansson. August 20, 2008

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Objektorienterad programmering Föreläsning 2

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

Övningsuppgifter till föreläsning 2 Variabler och uttryck

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

SMD 134 Objektorienterad programmering

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Funktioner. Linda Mannila

Labora&on 2 Funk&oner, if och loop övningar/uppgi:er

Kompilera och exekvera Javakod

Inledande programmering med C# (1DV402) Introduktion till C#

Programmering för språkteknologer I, VT2012. Rum

Typkonvertering. Java versus C

4.4 Swing ett interaktivt grafiskt gränssnitt

Objektorienterad programmering Föreläsning 4

Objektorienterad programmering D2

Laboration 10 - Eclipse

TUTORIAL: SAMLING & KONSOLL

Programmering. Den första datorn hette ENIAC.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

JavaScript del 5 Funktioner

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Föreläsning 1 & 2 INTRODUKTION

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

Objektorienterad Programmering (TDDC77)

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Anteckningar 1: Grundläggande saker

L04.1 Marodören. Inledning. Mål. Genomförande. Uppgift 1 Hello World. Moment I

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Programmering B med Visual C

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Transkript:

Programmering 1 med ActionScript 3.0 100 poa ng Innehåll Kort om kursen... 4 Del 1 - Om programmering i AS3... 5 Allmänt om programmering... 5 Många nya ord att lära sig... 5 Allmänna ord för AS3-program... 5 Vanliga programmeringsord... 5 Olika tecken som ofta används i AS3... 6 Reserverade ord som ingår i AS3-språket... 7 Program som behövs... 7 Ett första program i AS3 Hello world!... 7 Att ändra fönsterstorleken mm... 9 Om Flash-program... 9 Del 2 - Variabler och datatyper... 10 Ändra värdet i en variabel... 11 Slå ihop två strängar... 11 Del 3 - Funktioner... 13 Färdiga funktioner... 13 Färdig funktion med returvärde... 14 Slumpa tal... 14 Del 4 - Textfält... 16 Visa text i Flash-fönstret... 16 Ange färg och storlek för text i ett textfält... 17 Att placera ett textfält på scenen... 17 Del 5 - Skapa egna funktioner... 18 Kodblock och indentering... 18 Att skapa en funktion... 20 Att skapa en funktion med parametrar... 21 Parameter med defaultvärde... 22 Funktion för att visa text i Flash-fönstret... 22 1

Att skapa en funktion med returvärde... 23 Vad är funktioner bra för?... 24 Del 6 - Klasser och objekt... 25 Klassmetoder vs instansmetoder... 26 Konstruerare / Konstruktor... 27 Globala variabler och lokala variabler... 28 Utöka en klass (Arv)... 28 Olika ord för samma sak... 29 Importera en klass... 29 Vanliga klasser i AS3... 29 Klassdiagram och objektdiagram i UML... 29 7 Grafikhantering... 31 Rita enkel grafik... 31 Ladda in grafik till programmet... 31 Del 8 - Händelsehantering... 32 Lyssna på tangenttryckningar... 33 Lyssna på mushändelser... 34 Lyssna efter en ny ram... 35 Använda en timer och lyssna efter timer-händelse... 35 Del 8 - Logiska uttryck och villkor... 36 Datatypen Boolean... 36 Logiska uttryck... 36 Villkor med if och else... 37 Exempel på program som använder villkor... 37 Boll som studsar mot väggarna... 37 Klicka på kvadrat... 38 Superenkelt ritprogram... 38 Del 10 Datatyper och typomvandling... 39 Typomvandling... 39 Inmatning... 39 Tips... 39 Att flytta grafiska objekt... 39 Göra en knapp... 39 Algoritmer... 40 2

Aktivitetsdiagram... 40 Några enkla spel... 40 Fält (Array)... 40 Loopar... 41 Skjuta i alla riktningar... 41 Sökning och sortering... 41 XML och filhantering... 41 Rekursion... 41 Övningar och frågor... 42 3

Kort om kursen I den här kursen ska du få lära dig grunderna i programmering. Du kommer t.ex. att lära dig att slumpa tal, att få grafik att röra sig på skärmen samt att skapa enkla spel. I början är det många nya saker och ord att komma in i och förstå. Det kan kännas som rätt meningslösa program som vi skriver i början av kursen. Men det är viktigt att läsa sig grunderna i programmering innan man går vidare för att göra mer komplicerade program. Grunderna i programmering är i stort sätt de samma oavsett vilket programmeringsspråk man använder. Alltså spelar det inte så stor roll om det är C++, C#, Java, Python, PHP, ActionScript eller något annat modernt språk. Kan man programmera i ett ut av de språken är det relativt lätt att sätta sig in i ett av de andra. ActionScript 3.0 (AS3) är ett objektorienterat programmeringsspråk skapat av Adobe. Dess syntax, d.v.s. regler för hur man skriver programkoden, liknar den för Java och C# en hel del. Två av anledningarna till att vi ska använda AS3 i kursen är att man relativt snabbt kan komma in på grafikhantering med AS3 och att språket passar bra för att göra spel som sen lätt kan köras på internet. Det bästa sättet att lära sig programmering är att programmera. Men du behöver även förstå teori och se på programkod som andra har skrivit för att bli en bra programmerare. I slutet av häftet finns en del exempelkod och övningsuppgifter att jobba med. Du får gärna jobba på i din egen takt genom att läsa i häftet och försöka lösa övningsuppgifterna. Har du möjlighet att jobba även hemma så kommer det att göra att du lär dig fortare och har bättre chanser att klara kursen med ett högt betyg. Lycka till! \Håkan Lundberg 4

Del 1 - Om programmering i AS3 Allmänt om programmering Kommer Källkod, maskinkod Kompilering, interpretering Variabler, funktioner, objekt, händelsehantering Många nya ord att lära sig Följande ord är sådana som ofta återkommer i programmering med ActionScript. Förr eller senare måste du lära dig dem. Det kommer förmodligen att ta några veckor innan du förstår dem alla. Försök att så fort som möjligt lära dig vad de innebär, då blir det lättare att förstå teoridelarna och uppgifterna du ska göra i kursen. Allmänna ord för AS3-program Programkod/Kod Används för att skriva program som körs på en dator. ActionScript 3.0 (AS3) Ett programspråk för att göra Flash-program. as-fil (exempel.as) En fil som innehåller programkod skriven i AS3. Maskinkod Består av ettor och nollor som kan köras i datorns processorn. exe-fil (exempel.exe) En fil som innehåller maskinkod, även kallad binärkod. Kompilering Gör om programkod till en annan kod, i vårt fall till swf-kod. swf-fil (exempel.swf) En fil som innehåller swf-kod som kan köras i Flash-spelaren. Interpretering Tolkar swf-koden och gör om den till maskinkod. Flash Player Ett program som sköter tolkningen av swf-kod till maskinkod. (Kallas även för Flash-spelaren. Finns ofta redan installerat på datorn.) Vanliga programmeringsord Data Ett värde (eller flera värden), t.ex. ett heltal, ett decimaltal eller en text. Variabel Används för att laga data som kan ändras under programmets gång. Kan ses som en namngiven ask som kan hålla data. Konstant Som en variabel, men datat får inte ändras under programmets gång. Datatyp Bestämmer vad för slags data som får ligga i en variabel. o int Datatyp för heltal. (int är en förkortning av integer som betyder heltal.) o Number Datatyp för decimaltal. o String Datatyp för text. o Boolean Datatyp för variabler som kan ha värdet true eller false. Kommentar Används för att kommentera koden så den blir lätt att förstå. Görs med två stycken snedsträck. // Här en kommentar Variabeldeklaration Används för att skapa en ny variabel. I AS3 skriver man: var variabelnamn:datatyp; var minvariabel:string; // En variabel för text-data Sträng/Textsträng Ett annat ord för text i programmeringssammanhang. Referens Ett värde som refererar/pekar till en minnescell där data ligger lagrad. 5

Funktion Ett namngivet kodblock som utför något. Kan anropas från en annan funktion. Argument Det man skickar med till en funktion. Indata till en funktion. Parameter En slags variabler som används för att ta emot argument/indata i en funktion. Klass Ett namngivet kodblock som kan bestå av både variabler och funktioner. Används ofta som en mall för att skapa objekt. Objekt En slags kopia av en klass som har sitt eget unika data lagrat i variabler. Instans Ett annat ord för objekt. Instansvariabel En variabel som håller information om ett objekt av en viss klass. Attribut Ett annat ord för instansvariabel. Egenskap Ett annat ord för instansvariabel. Metod Ett annat namn för en funktion som ligger i en klass. Konstruktor Den metod som anropas när man skapar ett objekt av en klass. Har alltid samma namn som klassen. Den kan ha parametrar. new-operatorn Används för att skapa ett nytt objekt av en klass. var objektnamn:klassnamn = new Klassnamn(); Indentering Ett annat ord för indrag av en programrad. Används för att göra programkoden lättare att läsa och överblicka. Händelsehantering Används för att göra interaktiva program, t.ex. via mus och tangentbord. Händelselyssnare Kan läggas till ett objekt som ska lyssna efter en speciell händelse. Händelsehanterare En funktion som anropas när en viss händelse inträffat. Lyssnarfunktion Samma sak som händelsehanterare, bara ett annat namn. Händelseobjekt Håller information om en viss händelse. Skickas med till händelsehanteraren. Fält/Array Används för att lagra flera värden i en slags lista. Element Ett fält består av flera element som kan innehålla ett värde. Index Ett tal som anger positionen för ett element i ett fält. Indexering Används för att komma åt ett visst element i ett fält. Villkor (Selektion) Används för att göra val av vilken kod som ska köras. Skapas genom att använda if- och else-satser. Loop (Iteration) Används för att få ett kodblock att upprepas flera gånger. Skapas genom att använda for- eller while. Logiskt uttryck Används i villkor och loopar. Har värdet true eller false. if (tal1 == tal2) //kodblock Olika tecken som ofta används i AS3 Startklammer Används för att markera starten på ett block av programkod. Slutklammer Används för att markera slutet på ett block av programkod. Semikolon ; Används för att markera slutet på en programsats (ofta en rad). Kolon : Används vid variabel- och funktionsdeklarationer. Startparentes ( Används t.ex. vid anrop av en funktion, t.ex minfunktion() Slutparentes ) Används t.ex. vid anrop av en funktion, t.ex minfunktion() Hakparenteser [] Används för vid t.ex. indexering av fält. Citattecken " Används för att angränsa textsträngar, t.ex. "Hej på dig". Tilldelningstecken = Används för att tilldela (ge) en variabel ett värde. Lika med == Används för att avgöra om två variabler innehåller samma sak. Kommentartecken // Används för att kommentera programkoden. 6

Reserverade ord som ingår i AS3-språket var Används för att deklarera/skapa en variabel. const Används för att skapa en konstant. package All kod ligger lagrade i paket. class Används för att skapa en klass. function Används för att skapa en funktion/metod. import Används för att importera en klass till sitt program. Program som behövs För att ett program i AS3 ska kunna köras på en dator krävs att den har ett program som heter Flash Player installerat. Om det programmet inte finns på din dator kan du hämta det på http://get.adobe.com/se/flashplayer/. Det är Flash-spelaren (Flash Player) som gör att ett program skrivet i programspråket AS3 kan köras på en dator. Tack vara Flash-spelaren så kan ett program skrivet i AS3 köras på olika operativsystem. När man skriver sina program underlättar det mycket att använda en så kallad IDE (Integrated Development Environment), på svenska kan man säga utvecklingsmiljö. En gratis och bra IDE för AS3 är FlashDevelop (för Windows), en annan är Flash Builder (för Mac och Windows). På skolan kör vi med FlashDevelop för att programmera i AS3. Se www.flashdevelop.org. Ladda gärna ner FlashDevlop hemma om du kör Windows. (Man kan även skriva AS3-kod i Flash Professional, ett program som används för att skapa grafik och animationer i Flash. Men det är inte gratis.) Ett första program i AS3 Hello world! Vi ska nu göra ett första program i AS3. Du kommer förmodligen inte att förstå alla detaljer på en gång, men det gör ingenting. Först måste vi skapa ett nytt projekt i FlashDevelop. Starta FlashDevelop och välj i menyn: Project / New project / AS3 project [Bilder] Öppna filen Main.as genom att dubbelklicka på den i mappen src i filträdet till höger. (src är en förkortning för source som används för källkod/programkod.) FlashDevelop genererar (skapar automatiskt) en del kod när man skapar ett nytt AS3-projekt. Så här ser det ut i filen Main.as som skapas av FlashDevelop: package import flash.display.sprite; import flash.events.event; public class Main extends Sprite 7

public function Main():void if (stage) init(); else addeventlistener(event.added_to_stage, init); private function init(e:event = null):void removeeventlistener(event.added_to_stage, init); // entry point Förklaringar till all koden ovan kommer att ges senare. Nu nöjer vi oss med att säga att på raden under // entry point kan vi skriva vår programkod. Det som kommer efter // är en kommentar som används för att förklara programkod. Skriv på raden under // entry point följande: trace("hello World!"); Var noga med att skriva exakt så. (Det går t.ex. INTE att skriva Trace med stort T.) Testa sen att köra programmet genom att trycka på Crtl och Enter samtidigt. Det går också bra att klicka på den ljusblå pilen bland menyknapparna. Om allt går bra ska programmet starta och ge utskriften Hello World! i den så kallade output-panelen. [bild] Flash-fönstret som öppnades när programmet kördes är helt tomt. Om vi vill skriva en text i det så krävs det lite mer kod. Prova att skriva följande på raden under // entry point : var tf:textfield = new TextField(); tf.text = "Hej världen!"; tf.x = 100; tf.y = 200; stage.addchild(tf); Koden ovan kommer vi att i detalj förklara senare. För att kunna köra koden så krävs även att man lägger till en rad nästan högst upp i programmet där det finns två rader med import. Lägg där till följande kod: import flash.text.textfield; // Gör så att vi kan använda klassen TextField Testkör programmet genom att trycka på Crtl och Enter. Om allt går bra ska programmet starta och visa texten Hej världen! i Flash-fönstret. Det är tradition att det första programmet man gör när man lär sig ett nytt programspråk är att skriva ut Hello World!. Se http://en.wikipedia.org/wiki/hello_world_program_examples för exempel på hur man skriver Hello World -program i en massa olika programspråk. 8

Att ändra fönsterstorleken mm För att sätta fönsterstorleken, bakrundsfärgen, ramhastigheten mm kan man gå till Project / Properties. [bild] Ett annat sätt att ange fönsterstorlek mm är att skriva på raden ovanför Main-klassen: [SWF(width="800", height="600", framerate="60", backgroundcolor="#ffffff")] public class Main extends Sprite... Bakgrundsfärgen anges i hexadecimalform där de två första positionerna står för röd, de två mittersta för grön och de två sista för blå. Alltså RGB (Red Green Blue). För att få röd färg skriv: #FF0000. Om Flash-program Den programkod vi kommer att skriva ska lagras i filer med extensionen.as, t.ex. Main.as. För att omvandla programkoden i en as-fil till maskinkod som kan köras i processorn så krävs två steg: [bild] 1) Kompilering Sker i FlashDevelop. Då skapas en swf-fil med s.k. bytekod. 2) Interpretering Sker i Flash-spelaren. Bytekoden omvandlas till maskinkod. När vi startar ett program vi skrivit i AS3 genom att trycka Ctrl + Enter i FlashDevelop så omvandlas först vår programkod till s.k. bytekod som lagras i en swf-fil i mappen bin. Det kallas för att programkoden kompileras till bytekod. Om något skulle vara fel i programkoden så kommer inte kompileringen att lyckas utan ett eller flera felmeddelande kommer att ges i FlashDevelop. När kompileringen är klar så körs swf-filen i programmet Flash Player (Flash-spelaren). Flash-spelaren går igenom bytekoden och tolkar/omvandlar den till maskinkod (ettor och nollor) som körs i datorns processor. Det kallas för interpretering. [bild] Vid kompileringen så skapas även en html-fil som läggs i mappen bin. Den innehåller html och JavaScript som gör att man enkelt kan köra sitt program även i en webbläsare, t.ex. FireFox. Nu är det dags att börja ta sig in i den spännande programmeringsvärlden på allvar. 9

Del 2 - Variabler och datatyper En variabel är som en ask med ett namn i vilken man kan lagra data. Datat är ett värde av något slag, t.ex. ett heltal, ett decimaltal, en textsträng eller ett objekt. En datatyp är det som bestämmer vad för slags data som får ligga i en variabel. De datatyper vi kommer att använda i början är int (för heltal), Number (för decimaltal) och String (för text). Man skapar en variabel genom att skriva: var variabelnamn:datatyp; Variabelnamnet bestämmer man själv (det får inte innehålla mellanslag eller punkt och måste börja med en bokstav). Ofta börjar variabelnamnet med en liten bokstav. Datatypen är, som sagt, det som bestämmer vad för slags data som det får finnas i variabeln. Om datatypen är int, får bara heltal finnas i variabeln. Är datatypen Number, ska det finnas ett decimaltal i variabeln. Är datatypen String, ska variabeln användas för att laga en textsträng, t.ex. "Hej på dig". Ett annat namn för att skapa en variabel är att deklarera en variabel. Några exempel på variabledeklarationer, d.v.s. hur man skapar variabler: var x:int; // Skapar en variabel som kan innehålla ett heltal var mitttal:int; // Skapar en till variabel som kan innehålla ett heltal var dectal:number; // Skapar en variabel som kan innehålla ett decimaltal var slump:number; // Skapar en till variabel för decimaltal var s:string // Skapar en variabel som kan innehålla en textsträng var efternamn:string; // Skapar en till variabel för text Efter varje rad brukar man sätta ett semikolon ; som fungerar ungefär som en punkt i vanligt språk. I många programmeringsspråk så måste man ha ; men i AS3 är det frivilligt. För att stoppa in ett värde i en variabel använder man sig av tilldelningstecknet =. x = 5; // Lägger talet 5 in i variabeln x mitttal = x; // Värdet i variabeln x läggs in i variabeln mitttal dectal = 38.592; // OBS: Måste vara. när man anger ett decimaltal s = "Här kommer en textsträng som kommer att läggas in i variabeln s"; Man kan även ge en variabel ett startvärde direkt vid variabeldeklarationen: var heltal:int = -12; // Skapar en variabel för heltal som får startvärdet -12 var tal:number = 1.3; // Skapar en variabel för decimaltal som får startvärdet 1.3 var s:string = "Esperanto estas interesa lingvo."; // En variabel för text En datatyp anger vad för slags data/värde som får finnas i en variabel. Ex på datatyper i AS3: int För heltal, t.ex. 15 Number För decimaltal, t.ex. 21.34 String För text, t.ex. "Hej på dig" Boolean För true eller false En variabel har 3 saker: ett namn Hittar man på själv, börjar ofta med liten bokstav. 10

en datatyp Bestämmer vad för slags data som får finnas i variabeln. ett värde Kan ändras under programmets gång. En variabeldeklaration med startvärde: var variabelnamn:datatyp = värde_som_senare_kan_ändras; Ofta används något som kallas camel case för variabelnamn. Det vill säga att man skriver ihop flera ord och använder stor bokstav för varje nytt ord. T.ex. mitttal, hittilsminstavärdet, antalträffar. OBS: Man använder var bara när man skapar/deklarerar en variabel. Sen när man använder en variabel i sin programkod skriver man bara namnet på variabeln, t.ex. mitttal = 12. Ändra värdet i en variabel Variabler kan, som hörs på namnet, variera, d.v.s. värdet kan ändras under programmets gång. För att lägga in ett värde i en variabel använder man tecknet = som kallas för tilldelningstecken i programmeringssammanhang. var heltal:int = 2; // Skapar en variabel för heltal med ett startvärde... heltal = 33; // Senare i programmet kan variabeln få ett annat värde Man kan även öka eller minsta värdet i en variabel, i förhållande till värdet som finns i variabeln. Det kan göras t.ex. på följande sätt: var heltal:int = 10; // Skapar en variabel och lägger värdet 10 i den. heltal = heltal + 2; // Ökar värdet i variabeln heltal med 2. Blir 12. heltal = heltal - 5; // Minskar värdet i variabeln heltal med 5. Blir 7. Alltså, tecknet = är INTE ett matematiskt lika-med-tecken i programmeringsvärlden. Istället för att skriva variabel = variabel + värde så kan man skriva variabel += värde. Istället för att skriva variabel = variabel - värde så kan man skriva variabel -= värde. Det skrivsättet är lite kortare och används rätt ofta. var heltal:int = 10; // Skapar en variabel och lägger värdet 10 i den. heltal += 2; // Ökar värdet i variabeln heltal med 2. Blir 12. heltal -= 5; // Minskar värdet i variabeln heltal med 5. Blir 7. Slå ihop två strängar Även för textsträngar kan man använda tecknet +, men inte för summering utan för att slå ihop strängar. var namn1:string = "Anna"; // Skapar en variabel för text och lägger värdet "Anna" i den. var namn2:string = "Lena"; // Skapar en variabel för text och lägger värdet "Lena" i den. var namn3:string; // Skapar en variabel för text som från början är tom. namn3 = namn1 + namn2; // namn3 får värdet "AnnaLena" namn3 = namn1 + " " + namn2; // namn3 får värdet "Anna Lena" Att slå ihop två textsträngar kallas med ett fint ord för konkatingering. I AS3 kan man även slå ihop en textsträng och ett tal. Då omvandlas talet automatiskt till en textsträng. var s:string = "Tal:"; var tal:int = 3; 11

s = s + tal; // Blir "Tal:3" s = s + " " + tal; // Blir "Tal: 3" s = "" + tal; // Blir "3" Det är skillnad på ett tal, t.ex. 3 och textsträngen "3". Ett tal kan man göra matematiska beräkningar med, t.ex. multiplikation, det kan man inte med en textsträng. 12

Del 3 - Funktioner Allmänt om funktioner Färdiga Anropa Skapa Färdiga funktioner En funktion är en samling kod som utför något, t.ex. skriver ut ett meddelande på skärmen, ritar en cirkel i Flash-fönstret eller slumpar ett tal mellan 1 och 10. Det finns en massa färdiga funktioner i AS3 som man kan använda i sina program. Det finns även möjlighet att skapa egna funktioner, mer om det senare. Den första funktion som vi ska använda heter trace. Den används för att göra så att något skrivs i den så kallade output-panelen (en del av ett fönster i den IDE/utvecklingsmiljö du använder för att skriva ditt program, t.ex. FlashDevlop eller FlashBuilder) när programmet körs. trace("hello World!"); // Skriver texten Hello World! i output-panelen. [bild på FlashDevelop med output-panelen] Funktionen trace är går bra att använda för att se vad en viss variabel innehåller. T.ex. kan man skriva: var tal:int = 3; trace(tal); // Skriver innehållet i variabeln tal i output-panelen. trace("tal"); // Skriver texten "tal" i output-panelen. trace("variabeln tal har värdet: " + tal); Förstår du skillnaden på trace(tal) och trace("tal")? I det första fallet skrivs innehållet i variabeln tal i output-panelen, i det andra fallet skrivs texten "tal" i output-panelen. Utan citattecken räknas tal som en variabel, med citattecken runt räknas tal som en textsträng, d.v.s. tal. I stället för att säga använda en funktion kan man säga anropa en funktion. När man anropar en funktion så betyder det att programmet hoppar till den funktionen och kör den kod som finns där, sen hoppar programmet tillbaka till stället där anropet gjordes. En funktion anropas från en annan funktion, t.ex. från funktionen init (som genereras av FlashDevelop). En funktion anropas genom att skriva dess namn och två parenteser, t.ex. minfunktion(). Vissa funktioner kräver att man skickar indata mellan parenteserna till funktionen, t.ex. trace("hej"). Det som står mellan parenteserna kallas för argument. Funktionen trace kräver ett argument. Vissa funktioner kräver inget argument, vissa kräver flera argument. Via argumenten kan man skicka indata till en funktion som sen kan användas inne i den funktionen. (Mer om hur en funktion tar emot indata senare.) OBS: ALLTID NÄR MAN ANROPAR EN FUNKTION SKA MAN HA MED PARENTERSER, ÄVEN OM FUNKTINEN INTE TAR NÅGOT ARGUMENT. trace("hej världen!"); minfunktion(); // Funktion trace anropas med ett argument // Funktionen minfunktion anropas utan argument 13

Färdig funktion med returvärde Vissa funktioner skickar tillbaka ett värde när man anropar den. Värdet som skickas tillbaka kallas för returvärde. Ett exempel på en funktion som returnerar ett värde är random som returnerar ett slumpat decimaltal mellan 0 och 1. Funktionen random anropas genom att skriva Math.random(). Funktionen random ligger nämligen i en så kallad klass som heter Math, därför måste man skriva Math. innan funktionsnamnet anges, random i detta fall, sen följt av två parenteser. var slumptal:number = Math.random(); // Ett slumptal returneras och läggs i en variabel trace("ett slumptal mellan 0 och 1: " + slumptal); // Skriver ut slumptalet I och med att funktionen random skickar tillbaka ett värde som returvärde är det en bra idé att ha en variabel framför funktionsanropet som fångar upp returvärdet, variabeln slumptal i koden ovan. Om det inte finns en variabel framför funktionsanropet försvinner returvärdet i cyberrymden. Slumpa tal För att slumpa tal i AS3 använder man alltså: Math.random() Math kallas för en klass. Klassen Math innehåller matematiska konstanter och funktioner. En av funktionerna i klassen Math heter random och den returnerar ett slumpat decimaltal mellan 0 och 1. Funktionen random tar inga argument, alltså skriver vi funktionsnamnet följt av två parenteser: var slump:number = Math.random(); trace("slumptalet blev: " + slump); Eftersom funktionen random returnerar ett decimaltal så är det lämpligt att ha en variabel med datatypen Number framför funktionsanropet för att fånga upp returvärdet. Det är ju inte alltid man vill slumpa ett decimaltal mellan 0 och 1. Genom att använda funktionen round så avrundar man ett tal. Math.round(0.459) // Blir 0 Math.round(0.732) // Blir 1 var slumpatheltal:int = Math.round(Math.random()); // Blir antingen 0 eller 1 trace("slumptalet blev: " + slumpatheltal); Som argument till funktionen round används ovan returvärdet från funktionen random. Man kan alltså anropa en funktion inom parenteserna för en annan. Funktionen round avrundar antingen nedåt eller uppåt, beroende på den första decimalen. För att få större spridning på slumptalen kan man multiplicera returvärdet från random med ett heltal. Math.round(Math.random() * 10); // Ger ett slumptal mellan 0 och 10 Säg att Math.random() returnerade värdet 0.42863. Efter att ha multiplicerat det med 10 så får vi 4.2863. Efter avrundningen med hjälp av funktionen round så blir resultatet 4. Här följer några fler exempel: Math.round(Math.random() * 100); // Ger ett slumptal mellan 0 och 100 Math.round(Math.random() * 5); // Ger ett slumptal mellan 0 och 5 14

Math.round(Math.random() * 5) + 1; // Ger ett slumptal mellan 1 och 6 Math.round(Math.random() * 10) + 10; // Ger ett slumptal mellan 10 och 20 Som alternativ till round finns funktionerna ceil som alltid avrundar uppåt och floor som alltid avrundar nedåt: Math.ceil(1.2); // Ger värdet 2 Math.floor(1.9); // Ger värdet 1 Math.ceil(Math.random() * 10); // Ger ett slumptal mellan 1 och 10 Math.ceil(Math.random() * 6); // Ger ett slumptal mellan 1 och 6 Math.floor(Math.random() * 10); // Ger ett slumptal mellan 0 och 9 Math.floor(Math.random() * 10) + 10; // Ger ett slumptal mellan 10 och 19 15

Del 4 - Textfält Kommer Visa text i Flash-fönstret För att visa text i output-panelen så använder man funktionen trace. För att visa en text i Flash-fönstret (kallas även för scenen ) behöver man använda något som heter TextField. Så här kan det se ut i funktionen init: var tf:textfield = new TextField(); // Skapar ett nytt textfält och lägger det i en variabel tf.text = "Hej världen!"; // Anger vilken text som ska visas i textfältet tf.x = 100; // Anger var textfältet ska placeras i x-led tf.y = 200; // Anger var textfältet ska placeras i y-led tf.border = true; // Anger att textfältet ska ha en kant runt om stage.addchild(tf); // Gör så att textfältet i tf läggs ut på scenen När man skapar ett textfält med new TextField() så får man ett s.k. textfält-objekt som i fallet ovan lagras i en variabel tf. Ska man vara petig så lagras i variabeln tf en referens som pekar på (refererar till) en minnesadress där själva textfällt-objektet ligger lagrat. Men för enkelhetens skull så kallar vi tf för ett textfältobjekt. Alla objekt har egenskaper (properties på engelska) som håller information om objektet. En egenskap är en variabel som finns i ett objekt och håller information om objektet. Egenskaper kallas även för instansvariabler eller attribut. Genom att använda egenskaperna text, x, y och border för objektet tf så anger vi vilken text som ska visas i textfältet, var textfältet ska placeras och att textfältet ska ha en ram runt sig. För att få textfält-objektet att visas i Flash-fönstret behöver man lägga det på scenen. Det gör man genom att använda det inbyggda objektet stage som skapas automatiskt när man startar ett AS3-program. Objekt som ska visas på scenen kallas för barn. Genom att skriva stage.addchild(tf) får vi vårt textfältet-objekt att läggas ut på scenen, vilket gör att det visas i Flash-fönstret. Förutom att objekt har egenskaper som beskriver dess tillstånd så har de flesta objekt även funktioner som beskriver vad man kan göra med ett objekt. Funktioner som hör till objekt brukas kallas för metoder. En sådan funktion/metod för stage-objektet är addchild som tar ett objekt som argument, det objektet kommer att läggas till en lista av barn-objekt för scenen. Den listan kallas för display list. Alla scenens barn, d.v.s. alla objekt som finns med i display list visas i Flash-fönstret. [Bild på display list] Objektet stage (som representerar Flash-fönstret) har även egenskaper, alltså variabler som håller information om scenen. Två exempel är stagewith och stageheigt som håller information om hur stor scenen är, d.v.s hur många pixlar Flash-fönstret är på bredden och höjden. [bild på ett Flash-fönster med bredden och höjden utsatt] Vill vi att ett textfält ska hamna i mitten på scenen kan man skriva: var tf2:textfield = new TextField(); // Skapar ett textfält och lägger det i en variabel tf2.text = "Hej världen, från mitten!"; // Anger vilken text som ska visas i textfältet tf2.x = stage.stagewidth / 2; // Anger var textfältet ska placeras i x-led tf2.y = stage.stageheight / 2; // Anger var textfältet ska placeras i y-led tf2.border = true; // Anger att textfältet ska ha en kant runt om stage.addchild(tf2); // Gör så att textfältet i tf läggs ut på scenen 16

Nu har du sett hur man kan använda objektet stage och textfält-objekt för att visa text i Flash-fönstret. Vi kommer att jobba mycket med olika objekt senare. Objekt är nämligen det centrala i s.k. objektorienterad programmering som är den dominerande programmeringsstilen för stora program. Objektorienterad programmering ingår som ett centralt moment i kursen Programmering 1 och ännu mer i Programmering 2. Prova gärna att skriva stage. i FlashDevelop/FlashBuilder då kommer du se en lång lista på olika egenskaper och metoder som finns för det objektet. Även för ett textfält-objekt kan du prova det. Ange färg och storlek för text i ett textfält Färgen på en text i ett textfält ändrar man genom att använda egenskapen textcolor: var tf:textfield = new TextField(); // Skapar ett nytt textfält och lägger det i en variabel tf.text = "Hej igen... Nu i rött!"; // Anger vilken text som ska visas i textfältet tf.textcolor = 0xFF0000; // Färgen anger man i hexadecimal-form stage.addchild(tf2); // Gör så att textfältet i tf läggs ut på scenen För att ange en färg i AS3 skriver man 0x följt att ett tal i hexadecimal-form. Genom att använda klassen TextFormat kan man ändra storleken på texten i ett textfält: var mittformat:textformat = new TextFormat(); mittformat.size = 35; var mintext:textfield = new TextField(); mintext.defaulttextformat = mittformat; mintext.text = "Hej igen... Nu stort!"; mintext.width = 500; stage.addchild(mintext); [Hur man göra för att ändra font, kommer] Att placera ett textfält på scenen För att kunna placera ett textfält på scenen så måste man förstå hur koordinatsystemet fungerar i programmeringssammanhang. I vanliga fall så ser ett koordinatsystem ut på följande sätt: [bild] Men i programmeringssammanhang ser det ut så här: [bild] Origo (d.v.s. där x = 0 och y = 0) ligger alltså högst upp till vänster. Det är något man måste tänka på när man gör program som visar sakar i Flash-fönstret. 17

Del 5 - Skapa egna funktioner kommer Kodblock och indentering All vår programkod ligger i kodblock. Ett kodblock startas med en startklammer och avslutas med en slutklammer. Start- och slutklamrar kallas även för måsvingar. För att göra det lättare att hålla ordning på sina kodblock och alla klamrarna är det viktigt med indentering av sin programkod! Indentering betyder att man flyttar in den kod som ligger inuti ett block, antingen med en tab eller med t.ex. 3 mellanslag. // Startklamer. Ett kodblock startar. var tal:int = 38; // Koden i ett kodblock ska ligga intabbad så man tydligt trace(tal); //... ser de olika kodblocken och dess kod. // Slutklamer. Ett kodblock slutar. Det finns olika typer av kodblock som vi kommer att jobba med. Här tre exempel: - package Kodblocket på högst nivå. Kan vara namngivet eller utan namn. - class En klass ligger i ett paket och kan innehålla variabler, konstanter o funktioner. - function En funktion ligger ofta i en klass. (Kallas då även för metod.) Här en skiss på hur kodblocken förhåller sig till varandra: package // package-kodblocket startar class EttKlassnamn // class-kodblocket startar function ettfunktionsnamn():void // function-kodblocket startar // Slut på function-kodblocket // Kan finnas flera funktioner i en klass // Slut på class-kodblocket // Slut på package-kodblocket Här ungefär samma sak men med lite mer detaljer: package public class MinKlass private var minvar1:int; private var minvar2:string; // Ett paket är ofta utan namn (för oss) // Ett klassnamn börjar ofta med stor bokstav // Variabler som kan användas i alla funktioner //... som finns i klassen private function minfunktion():void // En funktion börjar ofta med liten bokstav var lokalvariabel:number; // En variabel som bara kan användas i minfunktion 18

// Slut på minfunktion-blocket // En klass kan ha många funktioner // Slut på MinKlass-blocket // Slut på paketet-blocket Orden public och private används för att ange vad som ska ses utanför klassen och vad som bara ska kunna användas inne i klassen. Sätter man public framför ett funktions-namn, kan man komma åt funktionen utanför klassen, d.v.s. från en annan klass. Skriver man private, är det inte möjligt att komma åt funktionen från en annan klass. Vi behöver inte fördjupa oss i detta nu. Det räcker med att komma ihåg att vi sätter public framför class och private framför function (och även framför var för de variabler som deklareras utanför funktioner). Man kan strunta i att skriva private framför function, det ger inget fel vid kompileringen men däremot en varning. Till en början skriver vi vår kod i funktionen init som genereras av FlashDevelop när man skapar ett nytt AS3- projekt. Så här ser det ut i filen Main.as (kommentarerna är tillagda av mig) som genereras av FlashDevelop när man skapar ett AS3-projekt: package import flash.display.sprite; import flash.events.event; // Importerar en klass för grafikhantering // Importerar en klass för händelsehantering public class Main extends Sprite // Skapar en klass Main som utökar klassen Sprite public function Main():void // Anropas när ett objekt skapas av klassen Main if (stage) init(); // Kollar om scenen är redo, i så fall anropas init else addeventlistener(event.added_to_stage, init); // Annars vänta och sen anropa init private function init(e:event = null):void // Hit kommer vi när scenen är redo removeeventlistener(event.added_to_stage, init); // Tar bort händelselyssnaren // entry point // Här kan du börja att skriva DIN KOD // Slut på funktionen init // Här kan du skriva en egen funktion. // Alltså utanför andra funktioner, men inuti klassen Main // Slut på klassen Main // Slut på paketet Det är viktigt att hålla rätt på alla start- och slutklamrar! Det är ett mycket vanligt fel i början att det blir knas med klamrarna. För att få alla klamrar på rätt plats, gör indenteringen noga!!! 19

Att skapa en funktion Det är viktigt att kunna skapa/skriva sina egna funktioner. Det gör att man kan dela upp sin kod och lättare återanvända den i andra program. (Även för händelsehantering i AS3, som vi kommer till senare, är det nödvändigt att kunna skriva egna funktioner.) När man skapar en variabel skriver man: var variabelnamn:datatyp; När man skapar en funktion skriver man: function funktionsnamn():datatyp // OBS: utan ; //Kodblock Raden med function funktionsnamn():datatyp kallas för funktionshuvud. Kodblocket inom klamrarna (måsvingarna) kallas för funktionskropp. Både när man anropar en funktion och när man skapar en funktion måste man ha () direkt efter funktionsnamnet. Datatypen som anges efter : när man skapar en funktion bestämmer vad för slags returvärde som ska skickas tillbaka från funktionen. Mer om det nedan. Ska funktionen inte returnera något så skriver man void istället för en datatyp. Här ett exempel: function entestfunktion():void // kodblock trace("hej från funktionen entestfunktion!"); trace("inte mycket som görs i denna funktion..."); trace("hej då funktionen entestfunktion!"); Funktionen entestfunktion kan vi anropa från funktionen init som skapats av FlashDevelop: function init(e:event = null):void // e:event = null kan vi bortse från // I funktionen init kan vi göra anrop till andra funktioner trace("nu startar init-funktionen."); trace("strax ska vi göra ett anrop till funktionen ettförstaexempel."); entestfunktion(); // Ett anrop till funktionen entestfunktion trace("nu är vi tillbaka i init-funktionen"); trace("nu är det slut på init-funktionen"); Prova gärna att skriva in koden ovan i FlashDevelop. Kör programmet. Då ska följande utskrift ges i output-panelen: Nu startar init-funktionen. Strax ska vi göra ett anrop till funktionen entestfunktion. Hej från funktionen entestfunktion! Inte mycket som görs i denna funktion Hej då från funktionen entestfunktion! Nu är vi tillbaka i init-funktionen. Nu är det slut på init-funktionen. 20

Alla våra program börjar i funktionen Main som anropar funktionen init. (Det är kod som skapas automatiskt av FlashDevelop när vi startar ett AS3-projekt.) I funktionen init kan vi skriva vilken kod vi vill. I exemplet ovan görs i init ett anrop till funktionen entestfunktion. När programmet kommer till den raden, hoppar det till den funktionen och kör programkoden som finns där. När programmet sen kommer till slutet av funktionen hoppas det tillbaka till den rad där anropet gjordes, alltså i funktionen init. Så långt hur man skapar en funktion utan returvärde och utan parametrar. Vad är en parameter? Det får du strax reda på. Att skapa en funktion med parametrar Nästa steg blir att skapa en funktion som anropas med ett argument, d.v.s det som anges mellan parenteserna vid ett funktionsanrop. Låt oss anta att funktionen heter visameddelande samt att den kräver en textsträng som argument. Anropet kan då se ut på följande sätt: visameddelande("halloj! Allt går bra."); // Argumentet är en textsträng En funktion som anropas med ett argument måste ha en slags variabel i sitt funktionshuvud som tar emot argumentet. Variabeln som tar emot ett värde vid ett funktionsanrop kallas för parameter. Namnet på parametern bestämmer man själv. Datatypen på parametern och på argumentet måste vara den samma. function visameddelande(textattvisa:string) : void trace("här är det som skickades till funktionen: " + textattvisa); Om argumentet "Halloj! Allt går bra." skickas med vid ett funktionsanrop till funktionen visameddelande läggs den texten in i parametern textattvisa. I funktionen kan vi sen använda textattvisa som vilken variabel som helst. Resultatet blir att vi får följande i output-panelen: Här är det som skickades till funktionen: Halloj! Allt går bra. Ett till exempel, denna gång är parametern av datatypen int (d.v.s. för heltal): function visatal(tal:int) : void trace("här är det som skickades till funktionen: " + tal); tal = tal * 10; trace("ett tal som är 10 gånger större: " + tal); Ett anrop till visatal kan se ut på följande sätt: visatal(38); // Argumentet 38 skickas med och läggs in i parametern tal Resultatet blir att vi får följande i output-panelen: Här är det som skickades till funktionen: 38 Ett tal som är 10 gånger större: 380 21

Hittills har vi skapat tre rätt meningslösa funktioner. Längre fram i kursen kommer du att se att vi måste kunna skriva egna funktioner för att kunna göra lite mer avancerade program. Därför är det viktigt att lära sig att skriva egna funktioner på ett grundligt sätt. Parameter med defaultvärde En sak som kan vara praktiskt i vissa situationer är att ge ett defaultvärde till en parameter. Det gör att man kan använda en funktion både med och utan argument. Ett exempel: function testmeddefaultvärde(tal:int = 10):void trace("parametern tal har värdet: " + tal); Funktionen ovan kan anropas på två sätt: Med ett heltal som argument Utan argument testmeddefaultvärde(4) testmeddefalutvärde() Anropas funktionen utan argument så ges parametern tal värdet 10 som default, eftersom det står = 10 i funktionshuvudet direkt efter datatypen, int, för parametern tal. Anropas funktionen med ett heltal som argument så kommer det talet att stoppas in i parametern tal, t.ex. 4. Även funktionen init som genereras av FlashDevelop har ett defaultvärde för parametern e, nämligen värdet null. (Värdet null betyder ett tomt värde.) Det gör att init kan anropas både med och utan argument. function init(e:event = null):void // Anropas init utan argument så får e värdet null Mer om null och datatypen (klassen) Event kommer i avsnittet om händelsehantering. Funktion för att visa text i Flash-fönstret En funktion som kan vara rätt användbar är en som visar en text i ett textfält på scenen, d.v.s. i Flash-fönstret. function visatext(texten:string, x:int, y:int) : void var tf:textfield = new TextField(); // Skapar ett nytt textfält-objekt tf.text = texten; // Anger vilken text som ska finnas i textfältet tf.x = x; // Anger var textfältet ska placeras i x-led tf.y = y; // Anger var textfältet ska placeras i y-led stage.addchild(tf); // Gör så att tf läggs ut på scenen Funktionen visatext har tre stycken parametrar, en för texten som ska visas i Flash-fönstret samt x och y för positionen för textfältet. Genom att anropa funktionen flera gånger med olika argument så visas flera texter på scenen: function init(e:event = null):void // e:event = null kan vi bortse från visatext("halloj!", 10, 50); // Visar en text på positionen 10, 50 visatext("tjena!", 100, 200); // Visar en text på positionen 100, 200 22

visatext("hejhopp!", 500, 400); // Visar en text på positionen 500, 400 Vid ett anrop kopieras argumenten över till parametrarna i funktionen. Alltså vid första anropet så kopieras argumentet "Halloj!" till parametern texten, argumentet 10 till parametern x och argumentet 50 till parametern y. På det sättet kan vi använda funktionen visatext till att skriva olika texter på olika ställen på scenen. Texten som ska visas och var den ska hamna styr vi genom argumenten som skickas med vid funktionsanropet. Att skapa en funktion med returvärde Vissa funktioner returnerar (skickar tillbaka) ett returvärde. Det kan t.ex. handla om en funktion som gör en beräkning och sen skickar tillbaka resultatet av beräkningen, ofta ett decimaltal. För att skapa en funktion med returvärde skriver man på följande sätt: function funktionsnamn(par1:datatyp, par2:datatyp,...):datatyp_för_returvärdet return returvärde; // Returvärdet kan t.ex. vara ett tal eller en text. Datatypen för returvärdet kan t.ex. vara int (då måste ett heltal returneras) eller String (då måste en textsträng returneras). Låt oss se ett exempel på en funktion som har ett returvärde: function ettexempelmedreturvärde():string var s:string = "Hej från funktionen ettexempelmedreturvärde!"; return s; Funktionen ettexempelmedreturvärde kan anropas från funktionen init: function init(e:event = null):void var t:string = ettexempelmedreturvärde(); // Returvärdet läggs i variabeln t trace("returvärdet är: " + t); Returvärdet måste vara av datatypen String eftersom vi har ":String" i funktionshuvudet. Därför har vi en variabel med datatypen String framför funktionsanropet för att fånga upp returvärdet som kommer från funktionen ettexempelmedreturvärde när programmet körs. Resultatet blir att följande visas i output-panelen: Returvärdet är: Hej från funktionen ettexempelmedreturvärde! Låt oss se ett exempel på en funktion som har både parameter och ett returvärde: function kvadrat(tal:int):int 23

var talikvadrat:int = tal * tal; return talikvadrat; Funktionen kvadrat kan anropas från funktionen init på följande sätt: function init(e:event = null):void // e:event = null kan vi bortse från var svar:int = kvadrat(5); // Ett anrop till en funktion vi skapat ovan trace("argumentet i kvadrat blir: " + svar); Det som händer när koden ovan körs är följande: 1. Programmet kommer in i funktionen init 2. Ett anrop till funktionen kvadrat görs, argumentet 5 skickas med 3. Argumentet 5 kopieras och läggs in i parametern tal 4. Koden i funktionen kvadrat körs, variabeln talikvadrat får värdet 25 5. Värdet i variabeln talikvadrat skickas tillbaka som ett returvärde till funktionsanropet i init 6. Returvärdet läggs in i variabeln svar som står framför funktionsanropet till kvadrat 7. En utskrift till output-panelen görs för att presentera returvärdet med hjälp av funktionen trace Försök att komma ihåg de 7 stegen! De gäller för de flesta funktionsanrop där det finns argument/parameter och returvärde. Vad är funktioner bra för? Jo, för att: 1. Få bättre struktur och överblick på sin kod (när man har ett stort program) 2. Undvika att ha samma kod på flera ställen 3. Lättare kunna återanvända kod 4. Kunna jobba med händelsehantering i AS3 OBS: Det är superviktigt att kunna anropa och skriva egna funktioner för att komma vidare i kursen och för att lära sig mer om programmering. Öva på det mycket så att du kan det som ett rinnande vatten. 24

Del 6 - Klasser och objekt Att förstå och kunna använda klasser och objekt är extremt viktigt i de flesta moderna programspråk. Det kommer förmodligen att ta ett tag tills att du förstår begreppen klass och objekt fullt ut. Läs gärna teoriförklaringarna flera gånger och jobba noga med övningarna utan att hasta fram, då har du goda chanser att lära dig denna centrala del av programmeringskonsten. En klass är en samling kod. Ofta har en klass både variabler och funktioner. Variablerna kallas vanligtvis för egenskaper och funktionerna kallas för metoder när de ligger i en klass. class KlassNamn var egenskapnamn1:datatyp; var egenskapnamn2:datatyp; // Kan användas i alla metoder function metodnamn1( ):datatyp function metodnamn1( ):datatyp Det finns många färdiga klasser i AS3, t.ex. TextField som vi sett exempel på ovan för att visa text i Flashfönstret. När vi vill visa en text i Flash-fönstret så skapar vi först ett objekt av klassen TextField, sen använder vi det objektet för att komma åt egenskaper som finns i textfält-objekt, t.ex. text, x, y och border. För att komma åt en egenskap i ett objekt skriver man objektnamnet, en punkt och sen egenskapsnamnet. Det kallas för punktnotation. var tf:textfield = new TextField(); // Skapar ett nytt textfält-objekt med namnet tf tf.text = "Hejhej"; tf.x = 10; tf.y = 20; tf.border = true; Även för att anropa en metod i ett objekt använder man punktnotation: // Ger egenskapen text i objektet tf ett värde // Ger egenskapen x i objektet tf ett värde // Ger egenskapen y i objektet tf ett värde // Ger egenskapen border i objektet tf ett värde tf.addeventlistener( ); stage.addchild(tf); // Anropas metoden addeventlistener i objektet tf // Anropar metoden addchild i objektet stage (Objektet stage representerar scenen och skapas automatisk när man startar ett AS3-program.) En klass består för det mesta av två delar: Del 1: För att lagra data (Egenskaper kallas även instansvariabler eller attribut) Del 2: För att kunna utföra saker (Metoder) 25

De flesta klasser är som en slags mall som används för att skapa objekt. Det är först när ett objekt skapas av en sådan klass som egenskaperna kan fyllas med värden. Alla objekt av en klass har sina egna värden i egenskaperna. T.ex. kan vi ha flera textfältobjekt som alla olika värden i egenskaperna text, x och y. [kod-ex] [exempel och uml-diagram] Man kan säga att en klass är en datatyp som gör det möjligt att hålla flera värden i egenskaper och som har metoder för att göra olika saker, t.ex. att bearbeta värdena (datat) som finns i egenskaperna. Om vi tänker oss en klass Person med variabler för att lagra egenskaperna vikt, längd och ålder så kan vi se Kalle som ett objekt av klassen Person med egenskaperna vikt 80, längd 180, ålder 18. Ett annat objekt av klassen Person kan vara Anna med egenskaperna vikt 75, längd 185, ålder 19. Metoder i klassen Person kan vara gå, äta, prata osv. Alla objekt av klassen Person har samma metoder och egenskaper, men egenskaperna håller olika värden för varje objekt. Lite förenklat kan man göra följande förklaring av egenskaper och metoder i objekt: Egenskaper: Metoder: Det objektet ÄR Det objektet KAN Klassmetoder vs instansmetoder Nyss lärde vi oss att man från en klass skapar objekt som man sen använder för att komma åt egenskaper och metoder genom att använda punktnotation. Alltså: Steg 1: Skapa objekt av klassen Steg 2: Använda punktnotation var objektnamn:klassnamn = new Klassnamn() objektnamn.egenskap eller objektnamn.metod() MEN Vissa metoder kan man använda genom att direkt skriva klassnamnet, följt av en punkt och sen namnet på den metod man vill anropa! T.ex. Math.random() för att anropa metoden random i klassen Math. Alltså, man hoppar över steg 1 och behöver inte skapa ett objekt av Math för att anropa random. En metod som anropas genom att skriva Klassnamn.metodnamn() kallas för klassmetod eller static-metod (p.g.a. att man använder ordet static när man skapar en sådan metod). I klassen Math är alla metoder klassmetoder. I vissa klasser så finns det både klassmetoder och vanliga metoder, s.k. instansmetoder. (T.ex. klassen Date har både instansmetoder och klassmetoder. En klassmetod markeras med [static] i dokumentationen: http://help.adobe.com/en_us/flashplatform/reference/actionscript/3/date.html ) Här exempel på hur man anropar en klassmetod respektive en instansmetod: var slump:number = Math.random(); // Anropar en klassmetod via klassen Math var tf:textfield = new TextField(); // Skapar ett textfält-objekt tf.addeventlistener(mouseevent.click, klick); // Anropar en instansmetod via objektet tf De flesta klasser fungerar som en slags mall utifrån vilken man kan skapa objekt genom att skriva: 26

var objektnamn:klassnamn = new Klassnamn(); Man använder sen variabeln objektnamn för att komma åt egenskaper (variabler) och anropa metoder (funktioner) som finns i klassen och alltså även i objekt som skapas av klassen. objektnamn.enegenskap = ett_värde; var x:datatyp = objektnamn.enegenskap; // Läser av värdet på en egenskap objektnamn.enmetod() // Anropar en metod i ett objekt // Sätter ett värde till en egenskap i ett objekt Anledningen till att man först måste skapa ett objekt av en klass för att kunna använda det som finns i klassen är att det ska göras plats för de egenskaper som finns i klassen. Det sker när man skriver new Klassnamn(). Klass: Objekt: Som en mall utifrån vilken man kan skapa objekt. Har egenskaper (variabler) för att kunna lagra data som är unika för varje objekt. Har metoder (funktioner) som utför olika saker. Har sitt data lagrat i egenskaperna (variabler) som finns i klassen. Har metoder som kan användas till att t.ex. ändra värdet på en egenskap i objektet. [bild] En gång till: Metoder som anropas med Klassnamn.metodnamn() kallas för klassmetoder eller static-metoder. Ex: Math.random(), Math.round(...) Metoder som anropas med objektnamn.metodnamn() kallas för instansmetoder eller bara metoder. Ex: tf.addeventlistener(...), stage.addchild(...) Varför kallas en metod som anropas via ett objekt för instansmetod? Jo, för att instans är ett annat ord för objekt. Man skulle lika gärna kunna säga objektmetod, men av någon anledning så säger man inte så, utan man använder ordet instansmetod eller bara metod. Konstruerare / Konstruktor När man skapar ett objekt av en klass, skriver man new Klassnamn(). Det som händer då är att en funktion/metod med samma namn som klassnamnet anropas, därför använder man (). En funktion/metod som har samma namn som klassen kallas för konstruerare eller konstruktor. Det är nämligen den som konstruerar ett objekt av den aktuella klassen. Vi återkommer till konstruerare när vi ska lära oss att skriva egna klasser. Än så länge så skriver vi vår kod i klassen Main som genereras av FlashDevelop. När vi kör ett sådant program så skapar Flash-spelaren ett Main-objekt och anropar dess konstruerare, alltså funktionen/metoden som heter Main (samma som klassnamnet). Låt oss se på en Main-klass igen: package import flash.display.sprite; import flash.events.event; // Importerar en klass för grafikhantering // Importerar en klass för händelsehantering 27