PROGRAMOWANIE W ŚRODOWISKU FLASH wykład 2 Paweł Woszkowski SWSIM 2009
ADOBE ACTIONSCRIPT Programming language of the Adobe Flash Platform. Originally developed as a way for developers to program interactivity, ActionScript enables efficient programming of Adobe Flash Platform applications for everything from simple animations to complex, datarich, interactive application interfaces. źródło: adobe.com
ADOBE ACTIONSCRIPT 3.0 First introduced in Flash Player 9, ActionScript 3.0 is an object-oriented programming (OOP) language based on ECMAScript the same standard that is the basis for JavaScript and provides incredible gains in runtime performance and developer productivity. ActionScript 2.0, the version of ActionScript used in Flash Player 8 and earlier, continues to be supported in Flash Player 9 and Flash Player 10. źródło: adobe.com
ECMASCRIPT Ustandaryzowane przez ECMA kluczowe elementy obiektowego skryptowego języka programowania JavaScript. Specyfikacja ta oznaczona jest jako ECMA-262. ECMA-262 definiuje samą semantykę języka oraz niektóre podstawowe typy danych (String, Boolean, Number, Object, itp.) i obiekty (np. Math, Array). Elementy takie jak model dokumentu lub specjalistyczne funkcje wejścia-wyjścia, obsługi GUI itp. nie wchodzą w skład specyfikacji ECMAScript, definiowane są przez inne standardy (W3C DOM) lub samych autorów konkretnych implementacji.
PIERWSZY PROJEKT ACTIONSCRIPT
ZMIENNE (VARIABLES) var mojapierwszazmienna:string = Hello world ; tytul.text = mojapierwszazmienna; Zmienne służą do przechowywania wartości używanych w programie. Nazwy zmiennych: mogą zaczynać się od litery lub znaku _ pozostała nazwa może składać się z liter, cyfr lub znaku _ wielkość liter ma znaczenie zmienne przyjęło się nazywać, używając tzw. CamelCase i rozpoczynać z małej litery
ZMIENNE (VARIABLES) var mojapierwszazmienna:string = Hello world ; tytul.text = mojapierwszazmienna; = var mojapierwszazmienna:string; mojapierwszazmienna = "Hello world"; tytul.text = mojapierwszazmienna;
TYPY DANYCH var zmienna:typ; Typ danej mówi kompilatorowi (a także programiście) jakiego typu jest zmienna a co za tym idzie, jakie może przyjmować wartości i jakie można na niej wykonywać operacje. Podstawowe typy danych: Boolean, int, Null, Number, String, uint, void. Złożone typy danych: Object, Array, Vector, Dictionary, MovieClip, Bitmap, Shape, ByteArray, TextField, SimpleButton, Date, Error, Function, RegExp, Video, XML, XMLList.
PODSTAWOWE TYPY DANYCH int - 32b, liczby całkowite z zakresu -2^31 do 2^31-1 uint - 32b, liczby naturalne z zakresu 0 do 2^32-1 Number - 64b, liczby zmiennoprzecinkowe Boolean - przechowuje wartości logiczne: true (prawda) i false (fałsz) String - reprezentuje sekwencję 16b znaków Null - może przyjmować wyłącznie wartość null i jest domyślną wartością dla typu String i wszystkich typów złożonych void - może przyjmować wyłącznie wartość undefined, używany przy definiowaniu funkcji
STAŁE (CONSTANTS) const MOJ_EMAIL:String = "p.woszkowski@swsim.edu.pl"; Służą do przechowywania wartości, które nie mogą zostać zmieniane podczas wykonywania programu. Nazwy stałych: mogą zaczynać się od litery lub znaku _ pozostała nazwa może składać się z liter, cyfr lub znaku _ wielkość liter ma znaczenie stałe przyjęło się nazywać, używając wyłącznie dużych liter i znaków _
DOMYŚLNE WARTOŚCI ZMIENNYCH int - 0 uint - 0 Number - NaN Boolean - false String - null W przypadku nie zadeklarowania typu zmiennej var zmienna; przyjmuje ona wartość undefined. Wartość domyślna zmiennych złożonych to null.
NAN I INFINITY NaN domyślna wartość zmiennych typu Number, wynik operacji, który powinien być liczbą a nią nie jest, np. pierwiastek kwadratowy z liczby ujemnej. NaN jest wynikiem dzielenia przez 0 tylko wtedy, kiedy liczba dzielona również była równa 0. W innym przypadku wynikiem jest Infinity bądź -Infinity. Aby sprawdzić, czy wynikiem operacji jest NaN, nie wystarczy porównać go z NaN. Należy użyć funkcji isnan().
ZMIENNE PODSTAWOWE I ZŁOŻONE CD var i:int = 20; var j:int = i; j = 30; trace(i); trace(j); Output: 20 30 var tablica1:array = new Array(1,2,3); var tablica2:array = tablica1; tablica2[0] = 4; trace(tablica1); trace(tablica2); Output: 4,2,3 4,2,3
OPERATORY ARYTMETYCZNE var a:int = 5; var b:int = 10; var c:int; c = a + b; c = a - b; c = a * b; c = b / a; c = a % b; var a:int = 1; var b:int = 2; var c:int = 3; var d:int; d = a + b * c; trace(d); d = (a + b) * c; trace(d); Output: 7 9
OPERATORY PODSTAWOWE [ ] inicjalizuje tablice {x:y inicjalizuje obiekt () grupowanie f(x) wywołanie funkcji new wywołanie konstruktora x.y dostęp do właściwości x[y] dostęp do właściwości <></> inicjalizuje obiekt XMLList(E4X) @ dostęp do atrybutu (E4X).. dostęp do nadrzędnego obiektu XML (E4X)
OPERATORY UNARNE ++ inkrementacja -- dekrementacja - arytmetyczna negacja! logiczna negacja ~ bitowa negacja delete usuwa właściwość typeof zwraca typ zmiennej void zwraca undefined
INKREMENTACJA I DEKREMENTACJA var a:int = 2; var b:int = 2; var c:int; var d:int; c = a++; d = ++b; trace(c); trace(d); Output: 2 3
OPERACJE BITOWE << przesunięcie bitów w lewo >> przesunięcie bitów w prawo >>> przesunięcie bitów w prawo liczba całkowita var i:int = 1; var j:int = i << 1; trace(j); var k:int = i <<2; trace(k); Output: 2 4
OPERATORY PORÓWNANIA < mniejszy > większy <= mniejszy lub równy >= większy lub równy as porównuje typ in sprawdza właściwość obiektu instanceof sprawdza czy instancją obiektu is sprawdza typ == równy!= różny === identyczny!== nie identyczny
OPERATOR === var i:int = 1; var j:boolean = true; trace(int(j)); trace(j == i); trace(i === j); Output: 1 true false
OPERATOR === var i:int = 1; var j:uint = 1; var k:number = 1; trace(i === j); trace(j === k); trace(i === k); Output: true true true true false trace(null == undefined); trace(null === undefined);
OPERATORY LOGICZNE & bitowe AND ^ bitowe XOR bitowe OR && lub AND logiczne AND lub OR logiczne OR 1 1 = 1; 1 0 = 1; 0 1 = 1; 0 0 = 0; 1 & 1 = 1; 1 & 0 = 0; 0 & 1 = 0; 0 & 0 = 0; 1 ^ 1 = 0; 1 ^ 0 = 1; 0 ^ 1 = 1; 0 ^ 0 = 0;
OPERATORY PRZYPISANIA = przypisanie *= mnożenie i przypisanie /= dzielenie i przypisanie %= reszta z dzielenia i przypisanie +=... -=... <<=... >>=... >>>=... &=... ^=... =... a = a + b; a += b; a = a * b; a *= b; a = a >> 2; a >>= 2;
KONTROLA PRZEPŁYWU var nowyemail:boolean = false; var artykulnapisany:boolean = false; // sekwencja trace( jem śniadanie ); trace( udaję, że pracuję ); trace( sprawdzam pocztę ); // wybór if(nowyemail) { trace( Odpowiedz ); else { trace( Czytaj bloga ); // powtarzanie while(!artykulnapisany) { trace( Zajęty ); artykulnapisany = true;
IF... ELSE if (wyrażenie) { // kod ActionScript ------------------------- var a:int = 15; if (a > 10) { trace( a > 10 ); If (wyrażenie) { // kod else { // inny kod ---------------------- var a:int = 10; if (a > 10) { trace( a > 10 ); else { trace( a <= 10 );
IF... ELSE IF... ELSE if (wyrażenie1) { // kod 1 else if (wyrażenie2) { // kod 2... else if (wyrażenie n) { // kod n else { // inny code var i:uint = new Date().getMonth(); // miesiące numerowane są od 0 do 11, więc... var miesiac:uint = i + 1; if( miesiac >= 3 && miesiac <= 5 ) { trace( Wiosna ); else if ( miesiac >= 6 && miesiac <= 8 ) { trace( Lato ); else if ( miesiac >= 9 && miesiac <= 11 ) { trace( Jesień ); else if ( miesiac == 12 miesiac == 1 miesiac == 2 ) { trace( Zima ); else { throw new Error( he??? );
SWITCH switch (wyrażenie) { case wartość 1: // kod 1 break; case wartość 2: // kod 2 break;... case wartość n: // kod n break; default: // kod domyślny break; var i:uint = new Date().getMonth(); var miesiac:uint = i + 1; switch (miesiac) { case miesiac >= 3 && miesiac <= 5: trace( Wiosna ); break; case miesiac >= 6 && miesiac <= 8: trace( Lato ); break; case miesiac >= 9 && miesiac <= 11: trace( Jesień ); break; case miesiac == 1 miesiac == 2 miesiac == 12: trace( Zima ); break; default: throw new Error( he??? );
SWITCH var i:uint = new Date().getMonth(); var miesiac:uint = i + 1; switch (miesiac) { case 3: case 4: case 5: trace( Wiosna ); break; case 6: case 7: case 8: trace( Lato ); break; case 9: case 10: case 11: trace( Jesień ); break; case 12: case 1: case 2: trace( Zima ); break; default: throw new Error( he??? );
PĘTLE WHILE while ( warunek ) { // kod ------------------------------------------ var i:int = 1; // licznik while ( i <= 50 ) { trace(i); i++; // inkrementujemy licznik Output: 1 2... 49 50 var i:int = 1; while ( i++ <= 50 ) { trace(i); -------------------------------------- var i:int = 1; while ( i++ <= 50 ) trace(i);
PĘTLE DO... WHILE do { // kod while (warunek); ------------------------------------------ while ( false ) { trace( pętla while ); do { trace( pętla do... while ); while ( false ); Output: pętla do... while
PĘTLE FOR for (wartość; warunek; operacja) { // kod -------------------------------- var i:int; for (i = 0; i < 5; i++) { trace(i); Output: 0 1 2 3 4
PĘTLE FOR... IN for (zmienna in obiekt) { // kod ------------------------------------ var wspolrzedne:object = {x:20, y:30; for (var i:string in wspolrzedne) { trace(i + ": " + wspolrzedne[i]); Output: x:20 y:30
PĘTLE FOR EACH... IN for each (zmienna in obiekt) { // kod ------------------------------------------ var wspolrzedne:object = {x:20, y:30; for each (var liczba in wspolrzedne) { trace(liczba); Output: 20 30
FUNKCJE Funkcje to bloki kodu, wykonujące określone zadanie, które mogą być wykorzystywane wielokrotnie podczas wykonywania programu. W zależności od tego, w jakim kontekście jest tworzona funkcja, w języku Actionscript nazywamy ją funkcją lub metodą. Metodą nazywamy funkcję, będącą częścią klasy lub funkcję przypisaną do instancji obiektu.
SKŁADNIA FUNKCJI function nazwafunkcji(p1:typ, p2:typ... pn:typ):typ { // kod ------------------------------------------------------ function dwucyfrowa(liczba:uint):string { if(liczba < 10) { return "0" + String(liczba); else { return String(liczba); dwucyfrowa(6); Output: 06
WARTOŚCI DOMYŚLNE function nazwafunkcji(parametr:typ = wartość):typ { // kod -------------------------------------------------------------- function test(x:int, y:int = 3, z:int = 5):void { trace(x, y, z); test(1, 2); Output: 1, 2, 5
PARAMETR... (REST) function pokazargumenty(... args):void { for (var i:uint = 0; i < args.length; i++) { trace(args[i]); pokazargumenty(1, 2, 3); Output: 1 2 3 ------------------------------------------- function pokazargumenty(x:int,... args):void { for (var i:uint = 0; i < args.length; i++) { trace(args[i]); pokazargumenty(1, 2, 3); Output: 2 3