Kim Bo Napisano 11 Październik 2011 Napisano 11 Październik 2011 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: 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
olaf Napisano 11 Październik 2011 Napisano 11 Październik 2011 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);
Kim Bo Napisano 11 Październik 2011 Autor Napisano 11 Październik 2011 u mnie nie przeszło. Jedynie przepycha Child żeby było widoczne, a nie tworzy wypełnienia bez Child'a..
bolitic Napisano 11 Październik 2011 Napisano 11 Październik 2011 Bo o to chodziło ola-fowi właśnie :]
olaf Napisano 11 Październik 2011 Napisano 11 Październik 2011 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 ;)
bolitic Napisano 11 Październik 2011 Napisano 11 Październik 2011 ola-f: fajny trick z zmienna nieokreślona K, ale raczej się czegoś takiego nie stosuje z tego co wiem - w większych projektach, jest to bardzo nieczytelne i chyba na dodatek wymaga większych zasobów komputera ;)
olaf Napisano 11 Październik 2011 Napisano 11 Październik 2011 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 ;)
bolitic Napisano 11 Październik 2011 Napisano 11 Październik 2011 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 1
Rekomendowane odpowiedzi
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ę