Napisano 2 Kwiecień 201015 l 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ń 201015 l przez torm
Napisano 2 Kwiecień 201015 l Autor 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();
Napisano 2 Kwiecień 201015 l 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(); )
Napisano 2 Kwiecień 201015 l 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.
Napisano 2 Kwiecień 201015 l Autor 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...
Napisano 2 Kwiecień 201015 l 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ś?
Napisano 2 Kwiecień 201015 l Autor 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?
Napisano 2 Kwiecień 201015 l 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 :)
Napisano 2 Kwiecień 201015 l 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ą.
Napisano 2 Kwiecień 201015 l Autor 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.
Napisano 2 Kwiecień 201015 l Och, to nie wiem. Bez kompilatora pod ręką i serii eksperymentów czuję się w AS3 trochę bezradny.
Napisano 2 Kwiecień 201015 l Autor 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ć :)
Napisano 2 Kwiecień 201015 l 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.
Napisano 6 Kwiecień 201015 l 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: dzudzu napisał: 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ń 201015 l przez BizU
Napisano 16 Kwiecień 201014 l Autor 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 :)
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto