Samouczek skryptu: duplicateMovieClip() (powielenia klipu)

Sierpień 30th, 2011 przez admin


Dla tych, którzy są zainteresowani pogłębieniem znajomości skryptu, prezentujemy samouczek  jednej z bardziej użytecznych poleceń skryptu jest duplicateMovieClip(). Ta akcja jest używana do dynamicznego zduplikowana istniejącego klipu i przynosi znakomite efekty, wykorzystywane np.  przy tworzeniu gry.

Tworzenie dodatkowych klipów w ten sposób ma ma wiele zalet, gdy w porównaniu do statycznego tworzenia w panelach obszaru roboczego czy konspektu:

  • Mniejsze pliki .swf and .swi. Co oznacza szybsze ładowanie.
  • Możne zaoszczędzić znaczną ilość czasu tworzenia, jeśli łączna liczba filmów jest duża.
  • Całkowita liczba klipów jest zmienną. To może być ustawiona zgodnie z wprowadzonymi danymi przez użytkownika. Jest to bardzo przydatne przy tworzeniu gier.
  • Ponieważ nowe pliki są tworzone przy użyciu skryptów,łatwo jest wyrównać nowo utworzone klipy wideo poprzez ustawienie ich współrzędne _x i _y .
  • Klipy utworzone w ten sposób mogą być usunięte dynamicznie.

To polecenie istnieje zarówno jako metoda filmu (Flash 5 i nowsze) i jako globalna funkcja (Flash 4 i poźniejsze). Akcja ma różne wersje:

  • duplicateMovieClip(cel:String, nowanazwa:String, glebokosc:Number) (Global function)
  • duplcateMovieClip(cel:MovieClip, nowanazwa:String, glebokosc:Number) (Global function)
  • cel.duplicateMovieClip(nowanazwa:String, glebokosc:Number, [poczatkowyObiekt:Object]) (metoda klipu filmowego)

gdzie:

cel jest nazwą klipu, który ma być powielony.

nowanazwa jest nazw dla powielonego, nowo tworzonego, klipu.

glebokosc: jest głębokością klipu. musi być liczbą dodatnią. Klip filmowy z wyższą głębokością przesłoni klipy o niższych numerach głębokości. Jeśli głębokość jest już w użyciu, istniejący film zostanie zastąpiony. Tylko jeden element może występować na każdej głębokości. Klipy stworzone statycznie w obszarze roboczym, przed uruchomieniem, mają ujemne wartości głębokość. Metoda klipu getNextHighestDepth() może być użyta do odnalezienia następnej dostępnej głębokości dla obiektu. Głębokości obiektów mogą być wymieniane między nimi za pomocą swapDepths().

poczatkowyObiekt: jest opcjonalnym parametrem, który określa początkowe atrybuty powielonego klipu (_x, _y, _rotation itp). Ten parametr jest dostępny tylko w wersji metoda polecenia .

Noty

  • Powielony klip zaczyna się odtwarzać na klatce 1.
  • Zmienne w oryginalnym klipie nie sakopiowane do zduplikowanego. Atrybuty są duplikowane, chociaż mogą być zmienione za pomocą parametry poczatkowyObiekt.
  • Gdyby (źródłowy) klip cel został usunięty, to powielone klipy są również usuwane.

Analiza przykładu pliku .swf

Scena składa się z jednego klipu filmowego mc , który zawiera wiele obiektów. Klip mc ma następujące zdarzenie onSelfEvent (release) , które jest przetwarzane, gdy klip jest kliknięty .

onSelfEvent (release) {
    _parent.CopyClip();
}

Funkcja CopyClip() , która jest tu wołana, jest zdefiniowana w głównym filmie i jest następująca:

function CopyClip() {
    var n = getNextHighestDepth();
    mc.duplicateMovieClip("mc" add n, n,
        {
            _x:Math.randomRange(25,425),
            _y:Math.randomRange(25,425),
            _rotation:Math.randomRange(-45,45)
        });
}

Ta funkcja woła wersję metody akcji duplicateMovieClip().

do n jest przypisywana następna dostępna głębokość dla głównego filmu.

Nowa nazwa filmu jest uzyskiwana przez dodanie n na końcu łańcucha znaków  “mc”. W ten sposób klipy nazwane mc1, mc2 etc. będą utworzone. n jest też używane do określenia głębokości nowego klipu.

poczatkowyObiekt jest używany do definiowania nowych wartości początkowych _x, _y i _rotation. Wartości te są ustawiane losowym wartościom .poczatkowyObiekt mógłby być poszerzony (gdy potrzeba) by zawierać dodatkowe atrybuty, jak  _xscale, _yscale, _alpha etc.

W końcu animowany krzyż: CrossAnimated, ma następujące zdarzenie onSelfEvent (release). To zdarzenie pozwala na usunięcie dynamicznie utworzonych klipów, gdy krzyż jest kliknięty:

onSelfEvent (release) {
    if ("mc" == _parent._name) {
        // nazwa określająca czy to klip tworzony statycznie
        // przełączenie widoczności ostrzeżenia
        _parent.warning_text._visible = !_parent.warning_text._visible;
    } else {
        _parent.removeMovieClip(); // usuń powielony klip
}

Ponieważ statycznie utworzone klipy nie mogą być usuwane, sprawdzenie jest wykonywane po nazwie klipu filmowego. Gdy klip ma nazwę “mc”. If (_name == “mc”) oznacza statyczny klip, klip wyświetla ostrzeżenie  (stan właściwości_visible jest przełączany). Gdy nazwa oznacza, że to nie jest statyczny klip, klip jest usuwany. Zauważ, że z perspektywy animowanego krzyża, obiekty w klipie są uzyskiwane poprzez odniesienie  _parent.

Przykładowy plik

Plik SWiSH Max4-a może być pobrany z tutaj.

 

.