Skocz do zawartości

[Action Script3] Wypełnianie obiektów


Kim Bo

Rekomendowane odpowiedzi

Kolejne pytanko z cyklu AS3 :P

Chciałbym wypełnić kolorem pewien MC ale z wypełnienia odejmując kształy np. żeby wypełnienie obejmowało wszystko z włączeniem przeźroczystości PNG, natomiast bez wybranych obiektów wektorowych na scenie.

 

przykład:

wypenienie.jpg

 

Na niebiesko obiekty wektorowe + np jakiś napis jako png umieszczony na scenie. Na Zielono utworzone dynamicznie wypełnienie bez tych wektorów.. mam nadzieje że rozumiecie ;D

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 7
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Popular Days

Top Posters In This Topic

o prostu wypełnij klip nowym mc z rectangle > draw i przepchnij wszystkie png nad niego i po sprawie.

 

function throwKitty(mClip,K){

var S:Sprite = new Sprite(); mClip.addChild(S);

S.graphics.beginFill(0x0000FF); S.graphics.drawRect(0,0,100,100); S.graphics.endFill();

mClip.setChildIndex(K,mClip.numChildren-1);}

 

throwKitty(Twój klip=mClip, pngClip=K);

Odnośnik do komentarza
Udostępnij na innych stronach

jak nie masz childów to nie wypychasz. czyli zatrzymujesz akcję na wypełnieniu. najprościej:

 

function throwKitty(mClip,K){

var S:Sprite = new Sprite(); mClip.addChild(S);

S.graphics.beginFill(0x0000FF); S.graphics.drawRect(0,0,100,100); S.graphics.endFill();

if(K){mClip.setChildIndex(K,mClip.numChildren-1);}}

 

przywołanie funkcji:

throwKitty(mClip, K); --- gdy masz plik png

throwKitty(mClip, false); --- gdy go brakuje

 

troche to naiwny sposób ale wth - działa ;)

Odnośnik do komentarza
Udostępnij na innych stronach

tak masz rację - brak deklaracji zmiennych to nie jest profesjonalna praktyka. Ale działa, więc czasem trzeba wybierać czy chce się mieć przykładny kod, czy prosta funkcję. Czasem lepsze jest to pierwsze innym razem drugie.

 

ostatnio w ogóle uzywam tablicy jako listy zmiennych i obiektów, dzieki temu mogę tworzyć aplikacje we flash bez zmiennych, co ostatnio zacząłem stosować dla własnej wygody ;)

Odnośnik do komentarza
Udostępnij na innych stronach

ola-f: w sumie to dobre rozwiązanie:] Ale wydaje mi się, że mniej czytelne. Tylko nie wiem czy używasz własnych tablic czy np korzystasz z "rest" (private function testFunction(... args):void {}). Jeśli nie korzystasz z rest to polecam te lekturę:

 

Obiekt arguments

 

Wewnątrz funkcji, do której przekazywane są parametry, można skorzystać z obiektu arguments, aby uzyskać dostęp do informacji o przekazanych parametrach. Oto niektóre ważne aspekty użycia obiektu arguments:

 

Obiekt arguments jest tablicą zawierającą wszystkie parametry przekazane do funkcji.

 

Właściwość arguments.length zawiera liczbę argumentów przekazanych do funkcji.

 

Właściwość arguments.callee zawiera odwołanie do samej funkcji, co bywa przydatne przy rekurencyjnych wywołaniach wyrażeń funkcyjnych.

Uwaga: Obiekt arguments nie jest dostępny, jeśli którykolwiek z parametrów ma nazwę arguments lub jeśli używany jest parametr ... (rest).

 

Jeśli do obiektu arguments istnieją odwołania w treści funkcji, wówczas w języku ActionScript 3.0 dozwolone jest wywoływanie funkcji z większą liczbą parametrów niż podana w definicji funkcji. Jednak w trybie dokładnym kompilator zgłosi błąd, jeśli liczba parametrów nie będzie zgodna z liczbą parametrów wymaganych (i ewentualnie parametrów opcjonalnych). Korzystając z obiektu arguments jak z tablicy, można odwołać się do dowolnego parametru przekazanego do funkcji, niezależnie od tego, czy został wymieniony w definicji funkcji. Poniższy przykład, który daje się skompilować bez błędnie tylko w trybie standardowym, ilustruje użycie tablicy arguments oraz właściwości arguments.length do wyświetlenia wszystkich parametrów przekazanych do funkcji traceArgArray():

 

function traceArgArray(x:int):void

{

for (var i:uint = 0; i

{

trace(arguments);

}

}

 

traceArgArray(1, 2, 3);

 

// output:

// 1

// 2

// 3

 

Właściwość arguments.callee jest często używana w funkcjach anonimowych to uzyskania rekurencji. Takie rozwiązanie pozwala na bardziej elastyczne programowanie. Jeśli w toku prac nad programem nazwa funkcji rekurencyjnej ulegnie zmianie, nie będzie konieczne modyfikowanie wywołania rekurencyjnego w treści funkcji — wystarczy zamiast nazwy użyć odwołania arguments.callee. Właściwość arguments.callee została użyta w poniższym wyrażeniu funkcyjnym, umożliwiając rekurencję:

 

var factorial:Function = function (x:uint)

{

if(x == 0)

{

return 1;

}

else

{

return (x * arguments.callee(x - 1));

}

}

 

trace(factorial(5)); // 120

 

Jeśli deklaracja funkcji zawiera parametr ... (rest), to obiekt arguments nie jest dostępny. Do parametrów należy się wówczas odwoływać za pomocą nazw, pod jakimi zostały zadeklarowane.

 

Należy również unikać używania ciągu znaków "arguments" w charakterze nazwy parametru, ponieważ taki parametr przesłoni obiekt arguments. Przykładowo, jeśli funkcja traceArgArray() zostanie zmodyfikowana poprzez dodanie parametru arguments, odwołania do obiektu arguments w treści funkcji będą teraz dotyczyły tego parametru, a nie obiektu arguments. Poniższy kod nie spowoduje wyświetlenia żadnych wyników.

 

function traceArgArray(x:int, arguments:int):void

{

for (var i:uint = 0; i

{

trace(arguments);

}

}

 

traceArgArray(1, 2, 3);

 

// no output

 

Obiekt arguments w poprzednich wersjach języka ActionScript zawierał też właściwość o nazwie caller będącą odwołaniem do funkcji, która wywołała bieżącą funkcję. Właściwość caller nie występuje w języku ActionScript 3.0, ale jeśli musimy odwołać się do funkcji wywołującej, możemy ją tak zmodyfikować, aby przekazywała odwołanie do samej siebie jako dodatkowy parametr.

 

Parametr ... (rest)

 

W języku ActionScript 3.0 wprowadzono możliwość zadeklarowania nowego rodzaju parametru o nazwie ... (rest). Umożliwia on podanie jako argumentu jednej tablicy zawierającej dowolną liczbę argumentów oddzielonych przecinkami. Parametr może mieć dowolną nazwę niebędącą słowem zastrzeżonym. Deklaracja takiego parametru musi być ostatnia na liście deklaracji. Użycie tego parametru powoduje, że obiekt arguments staje się niedostępny. Mimo że parametr... (rest) oferuje tę samą funkcjonalność, co tablica arguments i właściwość arguments.length, nie oferuje funkcjonalności właściwości arguments.callee. Decydując się na użycie parametru ... (rest), należy mieć świadomość, że uniemożliwi to korzystanie z właściwości arguments.callee.

 

W poniższym przykładzie funkcja traceArgArray() została zmodyfikowana w taki sposób, że zamiast obiektu arguments używany jest w niej parametr ... (rest):

 

function traceArgArray(... args):void

{

for (var i:uint = 0; i

{

trace(args);

}

}

 

traceArgArray(1, 2, 3);

 

// output:

// 1

// 2

// 3

 

Parametru ... (rest) można również używać z innymi parametrami, o ile będzie on ostatni na liście parametrów. W poniższym przykładzie funkcja traceArgArray() została zmodyfikowana w taki sposób, że pierwszy parametr, x, jest typu int, a drugi parametr jest parametrem ... (rest). Wyniki nie zawierają pierwszej wartości, ponieważ pierwszy parametr nie należy już do tablicy utworzonej przez parametr ... (rest).

 

function traceArgArray(x: int, ... args)

{

for (var i:uint = 0; i

{

trace(args);

}

}

 

traceArgArray(1, 2, 3);

 

// output:

// 2

// 3

 

  • Like 1
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności