torm Napisano 2 Kwiecień 2010 Napisano 2 Kwiecień 2010 (edytowane) Witam, zacząłem się uczyć ActionScript 3.0 i natknąłem się na mały problem, a raczej zagwożdżkę ;) otóż mam w kodzie coś takiego: button1_mc.addEventListener(MouseEvent.CLICK, onButton1Click); button1_mc.addEventListener(MouseEvent.CLICK, buttonClick); Chodzi o to, że chciałbym to trochę uprościć, żeby nie powtarzać dwa razy tego samego, czyli coś w rodzaju button1_mc.addEventListener(MouseEvent.CLICK, onButton1Click, buttonClick); Po prostu dodać dwie funkcję do jednego kliknięcia... Przy okazji, wszystkich chcących zacząć przygodę z ActionScript.. zachęcam do genialnych tutoriali Dru Kepple: http://active.tutsplus.com/author/dru-kepple/ - jedziemy od dołu i na koniec praktycznie wiemy o co w tym chodzi :) później tylko wystarczy nauczyć się funkcji :) Pozdrawiam Edytowane 2 Kwiecień 2010 przez torm
olaf Napisano 2 Kwiecień 2010 Napisano 2 Kwiecień 2010 a po co w ogole dajesz dwie funkcje do jednego eventu?
torm Napisano 2 Kwiecień 2010 Autor Napisano 2 Kwiecień 2010 a po to, że funkcja buttonClick, jest taka sama, a odnosi się do 7-dmiu przycisków, po prostu optymalizacja kodu. Pewnie myślisz o zagnieżdżeniu tej funkcji w onButton1Click, ale nie bardzo mi to wychodzi... może pokażę cały kod var image:Loader = new Loader(); addChild(image); image.x = 170; image.y = 34; var linkUrl:String; var currentButton:MovieClip; button1_mc.addEventListener(MouseEvent.CLICK, onButton1Click); button1_mc.addEventListener(MouseEvent.CLICK, buttonClick); button2_mc.addEventListener(MouseEvent.CLICK, onButton2Click); button2_mc.addEventListener(MouseEvent.CLICK, buttonClick); button3_mc.addEventListener(MouseEvent.CLICK, onButton3Click); button3_mc.addEventListener(MouseEvent.CLICK, buttonClick); button4_mc.addEventListener(MouseEvent.CLICK, onButton4Click); button4_mc.addEventListener(MouseEvent.CLICK, buttonClick); button5_mc.addEventListener(MouseEvent.CLICK, onButton5Click); button5_mc.addEventListener(MouseEvent.CLICK, buttonClick); button6_mc.addEventListener(MouseEvent.CLICK, onButton6Click); button6_mc.addEventListener(MouseEvent.CLICK, buttonClick); link_mc.addEventListener(MouseEvent.CLICK, onReadMoreClick); link_mc.addEventListener(MouseEvent.CLICK, buttonClick); function buttonClick(event:MouseEvent):void { if (currentButton) { currentButton.alpha = 1; currentButton.mouseEnabled = true; } currentButton = event.target as MovieClip; currentButton.alpha = 0.7; currentButton.mouseEnabled = false; } function onButton1Click(event:MouseEvent=null):void { setContent("Wiadukt Oryginalny", "Zdjęcie wiaduktu w Gostyniu przed obróbką w PS, wygląda dość blado... trzeba to poprawić :) poprawione zdjęcie znajduje się w kolejnym przycisku", "wiadukt.jpg", "http://pigk.net/torm/wiadukt.jpg" ); } function onButton2Click(event:MouseEvent):void { setContent("Wiadukt po obróbce", "Zdjęcie wiaduktu w Gostyniu po obróbce w Photoshopie, wygląda o wiele lepiej:)", "wiadukt_PS.jpg", "http://pigk.net/torm/wiadukt-PS.jpg" ); } function onButton3Click(event:MouseEvent):void { setContent("Maluszek", "Zdjęcie fiata 126p wykonane w Piaskach", "maluch_PS3.jpg", "http://pigk.net/torm/maluch-PS3.jpg" ); } function onButton4Click(event:MouseEvent):void { setContent("Droga do nikąd", "Droga która prowadzi do nikąd, no bo tak naprawdę dokąd?, w pewnych przypadkach ta reguła się nie sprawdza;)", "miniaturka.jpg", "http://pigk.net/torm/miniaturka.jpg" ); } function onButton5Click(event:MouseEvent):void { setContent("Widok z Balkonu", "Widok z balkonu - mieszkanie w Poznaniu. Widok rozciąga się na okolice rataj, najbardziej podoba mi się niebo:)", "widok_z_balkonu.jpg", "http://pigk.net/torm/widok-z-balkonu.jpg" ); } function onButton6Click(event:MouseEvent):void { setContent("master piece", "how to master the ActionScript3 ? it's simple, just visit Drew Kepple tutorials;)", "miniaturka.jpg", "http://dupajasia.com" ); } function onReadMoreClick(event:MouseEvent):void { var url:URLRequest = new URLRequest(linkUrl); navigateToURL(url, "_blank"); } function setContent(title:String, body:String, imageUrl:String, link:String):void { title_tf.text = title; body_tf.text = body; var url:URLRequest = new URLRequest("images/" + imageUrl); image.load(url); linkUrl = link; } onButton1Click();
dzudzu Napisano 2 Kwiecień 2010 Napisano 2 Kwiecień 2010 Hmm ekspertem nie jestem ale, jednocześnie dwóch metod chyba nie da się wywołać. Że niby jak, kompilator by naprzemiennie realizował linie kodu każdej z metod? Może jedną z metod wywołaj po prostu w drugiej (np. w metodzie onButtonClick wywołaj buttonClick(); )
olaf Napisano 2 Kwiecień 2010 Napisano 2 Kwiecień 2010 za slabo znam as3.0 w 2ce bym pewnie wywolal tą druga funkcje pierwszą i po sprawie, albo zobil obiekt z funkcjami i je przywolywal wybranym kilknieciem w dowolnej ilości.
torm Napisano 2 Kwiecień 2010 Autor Napisano 2 Kwiecień 2010 dzudzu - no nie wiem, skoro da się to zapisać w dwóch linijkach kodu, to dlaczego nie da się w jednej? (dodam, że kod powyżej działa, tylko chciałbym go trochę skompresować) ola-f - nie wiem jakie są różnice pomiędzy AS2 od AS3, ale właśnie nie mogę ich zagnieździć, bo funkcja buttonClick zawiera parametr event... i nie można jej wywołać przy pomocy buttonClick(); natomiast gdy pozbawię ją eventu event:MouseEvent, wówczas nie mogę uzyskać wartości event.target...
dzudzu Napisano 2 Kwiecień 2010 Napisano 2 Kwiecień 2010 button1_mc.addEventListener(MouseEvent.CLICK, onButton1Click); function buttonClick(event:event):void { if (currentButton) { currentButton.alpha = 1; currentButton.mouseEnabled = true; } currentButton = event.target as MovieClip; currentButton.alpha = 0.7; currentButton.mouseEnabled = false; } function onButton1Click(event:MouseEvent):void { buttonClick(event); setContent("Wiadukt Oryginalny", "Zdjęcie wiaduktu w Gostyniu przed obróbką w PS, wygląda dość blado... trzeba to poprawić :) poprawione zdjęcie znajduje się w kolejnym przycisku", "wiadukt.jpg", "http://pigk.net/torm/wiadukt.jpg" ); } Tak próbowałeś?
torm Napisano 2 Kwiecień 2010 Autor Napisano 2 Kwiecień 2010 aaa, działa pięknie dzięki wielkie :) jest jeszcze jeden problem... bo jak pewnie zauważyłeś w pierwszym onButton1Click, mam (event:MouseEvent=null), no i wyskakuje error, co prawda kompiluje się, ale mnie denerwuje ;) da się jakoś tego pozbyć, bez pisania kolejne funkcji?
olaf Napisano 2 Kwiecień 2010 Napisano 2 Kwiecień 2010 huhu, widze edytowales posta i wkleiles kod. Spoko w 10-20linijkach by sie zmiescil w sumie ;) moze trzymaj teksty w tablicy tak w ogole i zmien sobie np. http://pigk.net/torm/ na 'Url' a tytul wyciagej z poprzedniej linijki bo oczoplasu dostaniesz przy edycji kodu :)
dzudzu Napisano 2 Kwiecień 2010 Napisano 2 Kwiecień 2010 Error wyskakuje Ci, gdy jest tak: (event:MouseEvent=null) czy tak: (event:MouseEvent)? Bo ja bym ten null najchętniej wywalił. Nadpisuje Ci przecież zdarzenie kliknięcia myszką.
torm Napisano 2 Kwiecień 2010 Autor Napisano 2 Kwiecień 2010 ola-f pewnie masz rację, jednak na razie dopiero uczę się podstaw... jedyne co wiem o As to funkcje i zmienne... to tablic dopiero dojdę :) ale dopracowuje ten kod, żeby jak najwięcej z niego wiedzy wycisnąć :) robiłem to z tutoriala i przypuszczam, że linkUrl, jest po to, żeby łatwo było odróżnić od imageUrl... --edit-- dzudzu - (dopiero Twój post się pojawił) masz rację, ale jest mi to potrzebne do tego, żeby wywołać tę funkcję również bez potrzeby klikania.
dzudzu Napisano 2 Kwiecień 2010 Napisano 2 Kwiecień 2010 Och, to nie wiem. Bez kompilatora pod ręką i serii eksperymentów czuję się w AS3 trochę bezradny.
torm Napisano 2 Kwiecień 2010 Autor Napisano 2 Kwiecień 2010 rozumiem... na razie zastosuję do pierwszego buttonu po prostu podwójne wywołanie funkcji przez 2 eventy... może z czasem coś się uda wykombinować :)
olaf Napisano 2 Kwiecień 2010 Napisano 2 Kwiecień 2010 tak, mialem tylko na myśli, ze jezeli link np. http://www.portfolio.pl/galeria/ zastapisz zmienną jakąś krótką, łatwiej bedzie Ci sie przegladać kod.
torm Napisano 2 Kwiecień 2010 Autor Napisano 2 Kwiecień 2010 ola-f no fakt... :) Don't Repeat Yourself się kłania ;)
BizU Napisano 6 Kwiecień 2010 Napisano 6 Kwiecień 2010 (edytowane) Wiem że tablic jeszcze nie robiłeś, potraktuj to jako 'zajawkę', teraz zmieniając 2 tablice (dopisując po kolejnym wpisie dla tablic: tablice i obiekty, masz w pełni skalarny system). Wywaliłem jednego Eventa, on jest zbyteczny na tym etapie. śmiało można wywoływać funkcję setContent bezpośrednio w obsłudze 1 eventa. var image:Loader = new Loader(); addChild(image); image.x = 170; image.y = 34; var linkUrl:String; var currentButton:MovieClip; var tablice:Array = new Array(); // wypełnienie tablic: tablice[0] = ["Wiadukt Oryginalny", "Zdjęcie wiaduktu w Gostyniu przed obróbką w PS, wygląda dość blado... trzeba to poprawić :) poprawione zdjęcie znajduje się w kolejnym przycisku", "wiadukt.jpg", "http://pigk.net/torm/wiadukt.jpg"]; tablice[1] = ["Wiadukt po obróbce", "Zdjęcie wiaduktu w Gostyniu po obróbce w Photoshopie, wygląda o wiele lepiej:)", "wiadukt_PS.jpg", "http://pigk.net/torm/wiadukt-PS.jpg"]; tablice.push(["Maluszek", "Zdjęcie fiata 126p wykonane w Piaskach", "maluch_PS3.jpg", "http://pigk.net/torm/maluch-PS3.jpg"]); tablice.push(["Droga do nikąd", "Droga która prowadzi do nikąd, no bo tak naprawdę dokąd?, w pewnych przypadkach ta reguła się nie sprawdza;)", "miniaturka.jpg", "http://pigk.net/torm/miniaturka.jpg"]); tablice.push(["Widok z Balkonu", "Widok z balkonu - mieszkanie w Poznaniu. Widok rozciąga się na okolice rataj, najbardziej podoba mi się niebo:)", "widok_z_balkonu.jpg", "http://pigk.net/torm/widok-z-balkonu.jpg"]); tablice.push(["master piece", "how to master the ActionScript3 ? it's simple, just visit Drew Kepple tutorials;)", "miniaturka.jpg", "http://dupajasia.com"]); var obiekty:Array = [button1_mc, button2_mc, button3_mc, button4_mc, button5_mc, button6_mc]; // przypisanie akcji: for each (var element in obiekty) { element.addEventListener(MouseEvent.CLICK, buttonClick); } link_mc.addEventListener(MouseEvent.CLICK, onReadMoreClick); link_mc.addEventListener(MouseEvent.CLICK, buttonClick); function buttonClick(event:MouseEvent):void { if (currentButton) { currentButton.alpha = 1; currentButton.mouseEnabled = true; } currentButton = event.target as MovieClip; currentButton.alpha = 0.7; currentButton.mouseEnabled = false; var index:Number = obiekty.indexOf(event.target); // zabezpieczenie przed wywołaniem funkcji z obcego obiektu. if (index>=0) { setContent(tablice[index][0], tablice[index][1], tablice[index][2], tablice[index][3]); } } function onReadMoreClick(event:MouseEvent):void { var url:URLRequest = new URLRequest(linkUrl); navigateToURL(url, "_blank"); } function setContent(title:String, body:String, imageUrl:String, link:String):void { title_tf.text = title; body_tf.text = body; var url:URLRequest = new URLRequest("images/" + imageUrl); image.load(url); linkUrl = link; } setContent(tablice[0][0], tablice[0][1], tablice[0][2], tablice[0][3]); Powodzenia w AS // EDIT: Error wyskakuje Ci, gdy jest tak: (event:MouseEvent=null) czy tak: (event:MouseEvent)? Bo ja bym ten null najchętniej wywalił. Nadpisuje Ci przecież zdarzenie kliknięcia myszką. To nie oto chodzi, że nadpisuje, to jest watość domyślna. Przykładowo: mamy taką funkcję: function blabla(e:Event){}; Ją można wywołać tylko i wyłącznie podając parametr typu event w argumentach funkcji. Ale gdy mamy: function blabla(e:Event= null){}; to możemy wywołać na 2 sposoby: -podając argumenty typu Event -wywołując bez argumentów: blabla(); tutaj kompilator zobaczy, że liczba argumentów nie jest zgodna, ale za to nam podstawi null, i już bedzie się zgadzać. W poprzednim przeypadku deklaracj; function onButton1Click(event:MouseEvent=null):void {..}; musi być z domyślnym null'em, gdyż na końcu jest wywoływana funkcja bez argumentu: onButton1Click(); Edytowane 6 Kwiecień 2010 przez BizU
torm Napisano 16 Kwiecień 2010 Autor Napisano 16 Kwiecień 2010 witam, mam kolejny problem z AS 3.0, ale nie chciałbym nowego wątku tworzyć... więc zapytam tutaj... właśnie jestem w trakcie tworzenia menu we flashu... i musi ono współgrać z PHP... a więc odbierać zmienne... i przekształcać je na odpowiedni adres... znalazłem w necie kilka tutoriali na ten temat.. ale nadal ciężko mi ogarnąć to zagadnienie... jeśli ktoś mógłby rzucić na to trochę swiatła to byłbym wdzięczny :)
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ę