FLASH (teraz już Animate)
Przydatne kawałki Action Scriptu




Załączone pliki wymagają Adobe Flash w wersji CS 5.0 lub nowszej / Adobe Animate CC.

-> Action Script 2


-> Action Script 3

Kanał na YouTube na którym umieszczam wideotutoriale związane również z poniższą tematyką: https://www.youtube.com/channel/UCs0RbGqVCqTd6lzavN1cYcw/videos .


UWAGA!
Od września 2018 r. wtyczka AdobeAIR dla urządzeń pracujących pod kontrolą systemu Android nie jest już dostępna via Sklep Google/Play.
W celu jej zainstalowania należy:
• W "Ustawienia" -> "Zabezpieczenia" zezwolić na instalację aplikacji z nieznanych źródeł.
• Pobrać instalator wtyczki AIR.

Najnowsza wersja AIR 4 Android jest do pobrania stąd:
https://adobe-air.softonic.pl/android
lub
https://apkpure.com/pl/adobe-air/com.adobe.air
lub
https://www.techspot.com/downloads/5254-adobe-air-for-android.html#download_scroll
lub
https://downloads.digitaltrends.com/adobe-air/android
zawsze też można poszukać kopii tutaj: www.qba.4x.com.pl/flash/wersja25dlaAndroida.zip

starszą wersję można znaleźć tutaj:
https://play.google.com/store/apps/details?id=air.Air4Android&hl=pl&gl=US

• Zainstalować wtyczkę AdobeAIR.






Action Script 2

01
Sterownie przez klawiaturę MC „gracz”
Umieszczamy w obiekcie „gracz”

on (keyPress "q") { _y = _y - 5}
on (keyPress "z") { _y = _y + 5}
on (keyPress "i") { _x = _x - 5}
on (keyPress "p") { _x = _x + 5}

pobierz przykład (CS 5)




02
Sterownie przez klawiaturę MC „gracz” („gracz” nie przekracza krawędzi ekranu (550x400))
Umieszczamy w obiekcie „gracz”

on (keyPress "q") { _y = _y - 5 ; if (_y <= 0) { _y = 1} }
on (keyPress "z") { _y = _y + 5 ; if (_y >= 400) { _y = 399} }
on (keyPress "i") { _x = _x - 5 ; if (_x <= 0) { _x = 1} }
on (keyPress "p") { _x = _x + 5 ; if (_x >= 550) { _x = 549} }

pobierz przykład (CS 5)




03
Sterownie przez klawiaturę MC gracz (gracz przechodzi na przeciwległą krawędź (550x400))
Umieszczamy w obiekcie „gracz”

on (keyPress "q") { _y = _y - 5 ; if (_y <= 0) { _y = 399} }
on (keyPress "z") { _y = _y + 5 ; if (_y >= 400) { _y = 1} }
on (keyPress "i") { _x = _x - 5 ; if (_x <= 0) { _x = 549} }
on (keyPress "p") { _x = _x + 5 ; if (_x >= 550) { _x = 1} }

pobierz przykład (CS 5)




04
Generowanie zmiennej globalnej „liczba” o wartości 5 (i jej wyświetlenie poprzez trace)

_global.liczba = 5; trace (liczba)
trace

pobierz przykład (CS 5)




05
Generowanie zmiennej globalnej „liczba” o wartości 5 w MC

onClipEvent (enterFrame) { _global.liczba = 5 ; trace (liczba) }

pobierz przykład (CS 5)
 



06
Generowanie zmiennej globalnej „liczba” o wartości losowej z zakresu 0-6 w MC

onClipEvent (enterFrame) { _global.liczba = random (7) ; trace (liczba) }

pobierz przykład (CS 5)




07
Stały ruch MC w dwóch płaszczyznach (obiekt przechodzi na przeciwległą krawędź (550x400))

onClipEvent (enterFrame) { _y = _y - 2 ; if (_y <= 0) { _y = 400 } }
onClipEvent (enterFrame) { _x = _x - 3 ; if (_x <= 0) { _x = 550 } }

pobierz przykład (CS 5)




08
Obiekt samonaprowadzający się na obiekt „cel”

onClipEvent (enterFrame) { if (_root.cel._y < _y) { _y = _y -1}}
onClipEvent (enterFrame) { if (_root.cel._x < _x) { _x = _x -1}}
onClipEvent (enterFrame) { if (_root.cel._y > _y) { _y = _y +1}}
onClipEvent (enterFrame) { if (_root.cel._x > _x) { _x = _x +1}}

pobierz przykład (CS 5)




09
Wykrycie kolizji (obszarowej)

Umieszczamy w obiekcie „gracz”, wykrywa kolizję z obiektem „przeszkoda”
onClipEvent (enterFrame) {if (this.hitTest(_root.przeszkoda) == true) { trace("kolizja") }}

pobierz przykład (CS 5)
 



10
Wykrycie kolizji (obrysu)
Umieszczamy w obiekcie „gracz”, wykrywa kolizję z obiektem "przeszkoda"
zderzenie pozycji x i y obiektu red z obrysem blue

onClipEvent (enterFrame) {if (_root.przeszkoda.hitTest(_x, _y,  true )) { trace("kolizja")}}

pobierz przykład (CS 5)




11
MC "gracz" chodzi za kursorem

onClipEvent (enterFrame) {if (_ymouse <= _y ) {  _y = _y - 3 }}
onClipEvent (enterFrame) {if (_ymouse >= _y ) {  _y = _y + 3 }}
onClipEvent (enterFrame) {if (_xmouse <= _x ) {  _x = _x - 3 }}
onClipEvent (enterFrame) {if (_xmouse >= _x ) {  _x = _x + 3 }}

pobierz przykład (CS 5)





Action Script 3


Pamiętaj, że pliki publikowane do postaci aplikacji na urządzenia mobilne pracujące pod kontrolą systemów iOS i Android wymagają posiadania przez użytkownika darmowej wtyczki AIR.
Wtyczkę taką użytkownik iOS może pobrać ze sklepu Apple, zaś użytkownik Androida ze sklepu Googla (w Polsce Play-a) lub np. stąd: link.


01
Sterowanie klawiszami kursora obiektu "gracz"
Lepsza wersja w przykładzie 18!

var checkmove:Boolean;
var keycode:Number=0;
addEventListener(Event.ENTER_FRAME,enterframe);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keydown);
stage.addEventListener(KeyboardEvent.KEY_UP,keyup);
function keyup(arg:KeyboardEvent):void {checkmove=false;}
function keydown(event:KeyboardEvent):void {keycode=event.keyCode;movingcheck();}
function movingcheck():void {checkmove=true;}
function enterframe(arg:Event):void {
    if (keycode==Keyboard.RIGHT && checkmove==true) {gracz.x+=5;}
    if (keycode==Keyboard.LEFT && checkmove==true) {gracz.x-=5;}
    if (keycode==Keyboard.UP && checkmove==true) {gracz.y-=5;}
    if (keycode==Keyboard.DOWN && checkmove==true) {gracz.y+=5;}
 }

pobierz przykład (CS 5)




Sterowanie klawiszami kursora obiektu "gracz" (inny wariant)
Lepsza wersja w przykładzie 18!

stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_PressKeyToMove);
function fl_PressKeyToMove(event:KeyboardEvent):void
{switch (event.keyCode)
{
case Keyboard.UP:{gracz.y -= 5;break;}
case Keyboard.DOWN:{gracz.y += 5;break;}
case Keyboard.LEFT:{gracz.x -= 5;break;}
case Keyboard.RIGHT:{gracz.x += 5;break;}
}
}

pobierz przykład (CS 5)




02
Sterowanie klawiszami alfanumerycznymi (w przykładzie: q, a, o, p) obiektu "gracz"
Lepsza wersja w przykładzie 18!

var checkmove:Boolean;
var keycode:Number=0;
addEventListener(Event.ENTER_FRAME,enterframe);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keydown);
stage.addEventListener(KeyboardEvent.KEY_UP,keyup);
function keyup(arg:KeyboardEvent):void {checkmove=false;}
function keydown(event:KeyboardEvent):void {keycode=event.keyCode;movingcheck();}
function movingcheck():void {checkmove=true;}
function enterframe(arg:Event):void {
    if (keycode==Keyboard.O && checkmove==true) {gracz.x+=5;}
    if (keycode==Keyboard.P && checkmove==true) {gracz.x-=5;}
    if (keycode==Keyboard.Q && checkmove==true) {gracz.y-=5;}
    if (keycode==Keyboard.A && checkmove==true) {gracz.y+=5;}
 }

pobierz przykład (CS 5)




03
Sterowanie klawiszami kursora + shift (jako dopalacz)
źródło oryginału: https://coursesweb.net/actionscript/keyboard-events
Lepsza wersja w przykładzie 18!

stage.addEventListener(KeyboardEvent.KEY_DOWN, ruchTWOspeed);

function ruchTWOspeed(key_evt:KeyboardEvent):void
{
  // tu klawisz shift zmienia prędkość
  var vi:int = key_evt.shiftKey ? 12 : 2;

  switch (key_evt.keyCode)
  {
  case 37:
    gracz.x -= vi;
    break;
  case 39:
    gracz.x += vi;
    break;
  case 38:
    gracz.y -= vi;
    break;
  case 40:
    gracz.y += vi;
    break;
  default:
    break;
  }
}







04
Deaktywacja zdarzeń z aplikacji po jej wyłączeniu (np: wyłączenie dźwięku) - przykład dla procesorów typu ARM

if(Capabilities.cpuArchitecture=="ARM"){NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleDeactivate, false, 0, true);}
function handleDeactivate(event:Event):void { NativeApplication.nativeApplication.exit();}




05
Wykrywanie kolizji (prostokątnych obwiedni MC)

stage.addEventListener(Event.ENTER_FRAME, detectHit);
function detectHit(e:Event) :void{if(gracz.hitTestObject(przeszkoda)){ gracz.x = gracz.x - 30}}

pobierz przykład (CS 5)



06
Przemieszczanie obiektu (w tym wypadku w prawo)

gracz.addEventListener(Event.ENTER_FRAME, fl_przesun);
function fl_przesun(event:Event) {gracz.x += 10;}

pobierz przykład (CS 5)




07
Przeciąganie horyzontalne obiektu dwoma palcami na ekranie dotykowym (panoramowanie)

pobierz przykład (CS6)





08
Przesuwanie ekranów w aplikacji mobilnej z użyciem machnięcia/swipe.

pobierz przykład (CS6)




09
Rozwijane menu.

pobierz przykład (CS6)




10
Interaktywna panorama
wersja sterowana pozycją myszy

addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
function fl_EnterFrameHandler(event:Event):void
{
    drzewa.x = mouseX
    gory.x = mouseX * 0.5
    niebo.x = mouseX * 0.2 + 150
};
stop();

pobierz przykład (CS5)



11
Interaktywna panorama
wersja sterowana pozycją myszy (użycie zmiennej)

addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
function fl_EnterFrameHandler(event:Event):void
{
    var pozycja:int;
    pozycja = mouseX;
    drzewa.x = pozycja;
    gory.x = pozycja * 0.5;
    niebo.x = pozycja * 0.2 + 150;
};
stop();

pobierz przykład (CS5)



12
Wykonywanie połączeń telefonicznych i wysyłanie SMSów w środowisku Android

//definiujemy numer telefonu
const callURL:String="tel:1234567890";
//tworzymy żądanie zawierające wybrany numer
var targetURL:URLRequest = new URLRequest(callURL);
//wysyłamy numer do aplikacji telefonicznej na naszym urządzeniu
navigateToURL(targetURL);

    //definiujemy numer telefonu odbiorcy wiadomości
    const callURL:String="sms:1234567890";
    //tworzymy żądanie zawierające wybrany numer
    var targetURL:URLRequest = new URLRequest(callURL);
    //wysyłamy numer do aplikacji zarządzającej SMSami na naszym urządzeniu (zapewne zgłosi więcej niż jedna)
    navigateToURL(targetURL);


pobierz przykład (Animate CC 2018/19)




13
Mechanizm gry w spadające obiekty.

pobierz przykład (Flash CS5 i nowsze)





14
Aplikacja Adobe AIR na urządzenia mobilne.
Jak stworzyć nowy dokument do pracy na urządzeniach mobilnych.
Jak opublikować go do postaci instalera aplikacji Adobe AIR dla platformy Android.
Wideotutorial:
https://www.youtube.com/watch?v=MR-05T4uJ8I&t=274s





15
Jak wyłączyć ENTER_FRAME?
Aby pozbyć się zapętlonego ENTER_FRAME (np. po przejściu do innej sceny) można zastosować np:

    //wyłącza ENTER_FRAME
    this.removeEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
    //przenosi do kolejnej sceny
    MovieClip(this.root).gotoAndPlay(1, "Scene 3");

W razie kilku ENTER_FRAME należy wyłączyć każdy z osobna zmieniając "fl_EnterFrameHandler" na nazwy kolejnych niechcianych funkcji.






16
Jak wyłączyć przeciągnij i upuść?

stage.removeEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);
stage.removeEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);





17
Jak wyłączyć test kolizji?

stage.removeEventListener(Event.ENTER_FRAME, detectHit);





18
Sterowanie ruchem gracza dowolnymi klawiszami.

function reportKeyDown(event: KeyboardEvent): void {
    trace("nacisnieto: " + String.fromCharCode(event.charCode) + " (kod: " + event.charCode + ")");;
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);


stage.addEventListener(KeyboardEvent.KEY_DOWN, ruchTWOspeed);

function ruchTWOspeed(key_evt: KeyboardEvent): void {
    // tu klawisz shift zmienia prędkość
    var ruchipredkosc: int = key_evt.shiftKey ? 12 : 2;

   
    // ponizsze kody ustawione sa na klawisze kursora
    // zmieniajac ich numery na te z informacji typu
    // "nacisnieto: Q (kod: 113)"
    // uzyskasz aktywacje innymi klawiszami
    switch (key_evt.keyCode) {
        case 37:
            gracz.x -= ruchipredkosc;
            break;
        case 39:
            gracz.x += ruchipredkosc;
            break;
        case 38:
            gracz.y -= ruchipredkosc;
            break;
        case 40:
            gracz.y += ruchipredkosc;
            break;
        default:
            break;
    }
}

//aby dzialalo, po uruchomieniu przykladu kliknij w okno z gra





19
Jak umieścić tekst w okienku tekstowym

Utwórz tekst, zmień go na dynamiczny, nadaj mu nazwę wystąpienia (w tym przykladzie "tekst1").
Wykorzystaj poniższy kod:

// definicja zmiennej będącej ciągiem znaków alfanumerycznych
var tekstdonapisania:String ;
// nadanie zawartości zmiennej
tekstdonapisania= "coś";
// umieszczenie zawartości zmiennej w dynamicznym oknie tekstowym
tekst1.text = tekstdonapisania ;





20
Jak umieścić wartość numeryczną w oknie tekstowym

Utwórz tekst, zmień go na dynamiczny, nadaj mu nazwę wystąpienia (w tym przykladzie "tekst1").
Wykorzystaj poniższy kod:

// definicja zmiennej będącej wartością numeryczną
var numer: Number ;
// nadanie wartości zmiennej numerycznej
numer = 123 ;
// definicja zmiennej przechowującej ciąg alfanumeryczny
var tekstdonapisania:String ;
// nadanie zawartości zmiennej
tekstdonapisania= numer+"" ;
// umieszczenie zawartości zmiennej w dynamicznym oknie tekstowym
tekst1.text = tekstdonapisania ;





21
Jak wykrywać kolizje faktycznego kształtu, a nie obwiedni

Utwórz dwa MovieClipy o nazwach "gracz" i "labirynt".
Wykorzystaj poniższy kod:

addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
function fl_EnterFrameHandler(event:Event):void
{  if (labirynt.hitTestPoint (gracz.x , gracz.y , true)) { trace("kolizja");}  }

Za każdym razem gdy wartości położenia (x i y) obiektu "gracz" dotkną grafiki w obiekcie "labirynt" - zostanie wykryta kolizja obwieszczana komunikatem "kolizja" w oknie Wyjście/Output.





22
Blokada dezaktywowana pinem wprowadzanym w okno tekstu dynamicznego

Utwórz tekst, zmień go na input (wejściowy), nadaj mu nazwę wystąpienia "tekstpin".
Pinem jest "123"
Utwórz przycisk (zatwierdzający wprowadzony pin), nadaj mu nazwę wystąpienia "dalej".
W klatce 10 umieść informację o wprowadzeniu błędnego pinu, a w 15 o pinie poprawnym.

var danepinu:Array = [["PIN","123"]];
var i:Number=0;
    function ustawieniepinu():void {
     tekstpin.text = danepinu[i][0];
     dalej.addEventListener(MouseEvent.CLICK, clickHandler);
    };
    ustawieniepinu();

    function clickHandler(event:MouseEvent):void
{
     var poprawnypin:String;
     var wprowadzonypin:String;
     wprowadzonypin = tekstpin.text;
     poprawnypin = danepinu[i][1];
     if (wprowadzonypin == poprawnypin) { trace("dobry"); gotoAndStop(15);} else {trace("bledny"); gotoAndStop(10);}
    };




23
Mechanizm gry labiryntowej

Utwórz MC "gracz" i "labirynt". Pamiętaj by grubość ścian labiryntu była wyraźnie grubsza niż największy dopuszczalny wektor ruchu, zaś szerokość korytarzy od grubości ścian.

stop();

addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
function fl_EnterFrameHandler(event:Event):void

   
// sprawdzamy czy kursor jest wyraznie w lewo od gracza, jesli tak idzie on w lewo
if (gracz.x > mouseX + 50) { gracz.x = gracz.x - 1 ; trace ("ruch w lewo"); };

// sprawdzamy czy wystapila kolizja, jezeli tak to odwracamy wektor ruchu gracza
if (labirynt.hitTestPoint (gracz.x , gracz.y , true)) { trace("kolizja przy ruchu w lewo"); gracz.x = gracz.x + 1.1 } 

// sprawdzamy czy kursor jest wyraznie w prawo od gracza, jesli tak idzie on w prawo
if (gracz.x < mouseX - 50) { gracz.x = gracz.x + 1 ; trace ("ruch w prawo");};
 
// sprawdzamy czy wystapila kolizja, jezeli tak to odwracamy wektor ruchu gracza
if (labirynt.hitTestPoint (gracz.x , gracz.y , true)) { trace("kolizja przy ruchu w prawo"); gracz.x = gracz.x -1.1} 

// sprawdzamy czy kursor jest wyraznie w gore od gracza, jesli tak idzie on w gore
if (gracz.y > mouseY + 50) { gracz.y = gracz.y - 1
; trace ("ruch w gore"); };

// sprawdzamy czy wystapila kolizja, jezeli tak to odwracamy wektor ruchu gracza
if (labirynt.hitTestPoint (gracz.x , gracz.y , true)) { trace("kolizja przy ruchu w gore"); gracz.y = gracz.y +1.1 }

// sprawdzamy czy kursor jest wyraznie w dol od gracza, jesli tak idzie on w dol
if (gracz.y < mouseY - 50) { gracz.y = gracz.y + 1
; trace ("ruch w dol"); };

// sprawdzamy czy wystapila kolizja, jezeli tak to odwracamy wektor ruchu gracza
if (labirynt.hitTestPoint (gracz.x , gracz.y , true)) { trace("kolizja przy ruchu w dol"); gracz.y = gracz.y -1.1 } 

}






24
Mechanizm gry labiryntowej + animacja postaci w zależności od kierunku ruchu

Jak w 23 tylko należy dodać cztery MC zawierającze animacje zapętlonego ruchu gracza.



stop();

addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
function fl_EnterFrameHandler(event:Event):void

   
// MC z animacjami ruchu pozycjonowane są na pozycji obiektu "gracz"
graczLEWO.x = gracz.x
graczPRAWO.x = gracz.x
graczTYL.x = gracz.x
graczPRZOD.x = gracz.x
graczLEWO.y = gracz.y
graczPRAWO.y = gracz.y
graczTYL.y = gracz.y
graczPRZOD.y = gracz.y
   
// sprawdzamy czy kursor jest wyraznie w lewo od gracza, jesli tak idzie on w lewo
if (gracz.x > mouseX + 50) { gracz.x = gracz.x - 1 ; trace ("ruch w lewo");  gracz.alpha = 0 ; graczLEWO.alpha = 1 ; graczPRAWO.alpha = 0 ; graczTYL.alpha = 0 ; graczPRZOD.alpha = 0 ;};

// sprawdzamy czy wystapila kolizja, jezeli tak to odwracamy wektor ruchu gracza
if (labirynt.hitTestPoint (gracz.x , gracz.y , true)) { trace("kolizja przy ruchu w lewo"); gracz.x = gracz.x + 1.1 } 

// sprawdzamy czy kursor jest wyraznie w prawo od gracza, jesli tak idzie on w prawo
if (gracz.x < mouseX - 50) { gracz.x = gracz.x + 1 ; trace ("ruch w prawo"); gracz.alpha = 0 ; graczLEWO.alpha = 0 ; graczPRAWO.alpha = 1 ; graczTYL.alpha = 0 ; graczPRZOD.alpha = 0 ;};
 
// sprawdzamy czy wystapila kolizja, jezeli tak to odwracamy wektor ruchu gracza
if (labirynt.hitTestPoint (gracz.x , gracz.y , true)) { trace("kolizja przy ruchu w prawo"); gracz.x = gracz.x -1.1} 

// sprawdzamy czy kursor jest wyraznie w gore od gracza, jesli tak idzie on w gore
if (gracz.y > mouseY + 50) { gracz.y = gracz.y - 1 ; trace ("ruch w gore");gracz.alpha = 0 ; graczLEWO.alpha = 0 ; graczPRAWO.alpha = 0 ; graczTYL.alpha = 1 ; graczPRZOD.alpha = 0 ;};

    // sprawdzamy czy wystapila kolizja, jezeli tak to odwracamy wektor ruchu gracza
if (labirynt.hitTestPoint (gracz.x , gracz.y , true)) { trace("kolizja przy ruchu w gore"); gracz.y = gracz.y +1.1 }

// sprawdzamy czy kursor jest wyraznie w dol od gracza, jesli tak idzie on w dol
if (gracz.y < mouseY - 50) { gracz.y = gracz.y + 1 ; trace ("ruch w dol"); gracz.alpha = 0 ; graczLEWO.alpha = 0 ; graczPRAWO.alpha = 0 ; graczTYL.alpha = 0 ; graczPRZOD.alpha = 1 ;};

    // sprawdzamy czy wystapila kolizja, jezeli tak to odwracamy wektor ruchu gracza
if (labirynt.hitTestPoint (gracz.x , gracz.y , true)) { trace("kolizja przy ruchu w dol"); gracz.y = gracz.y -1.1 } 

}





25)
Wyłącznik/usuwacz  EnterFrame.

removeEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler)




c.d.n. :-)