SWiSH Forum
Forum użytkowników programów SWiSH

SWiSH Max - Tło obrazkowe

krzywy105 - Czw 12 Sty, 2012 15:44
Temat postu: Tło obrazkowe
Witam.
W jaki sposób mogę za pomocą skryptu ustawić tło obrazkowe (png) dla obiektu który ma być przyciskiem?
Zastosowanie loadMovie dla przycisku który jest przekonwertowany do movieclipa powoduje że nie działa akcja onPress.

espe1 - Czw 12 Sty, 2012 19:28

Działa, tylko coś poknociłeś.

Masz jakiś kształt (obiekt)
Wypełnienie obiektu - są 4 rodzaje:

- None (brak)
- Solid (jeden kolor)
- Gradient
- Image (zdjęcie png, jpg, gif, bmp, dib)

zaznaczasz Image i z boku otwierasz pomarańczową ikonę Open Image - wskazujesz plik na dysku

krzywy105 - Czw 12 Sty, 2012 20:33

Tak tylko tu chodziło o ustawienie tego za pomocą skryptu. Ale mniejsza z tym przeniosłem akcje onPress z przycisku do klipu do którego ładuje też obraz i wygląda że działa.

Mam natomiast inny problem. Struktura projektu jest taka że. Jest scena1 która zawiera klip map_klip który to następnie zawiera klip przycisk

Następnie dynamicznie tworze z poziomu sceny1 klipy dynamiczne będące kopią klipu przycisk.
Kod:
for (i=1; i <= ilosc_ikon; i++) {   
map_klip.przycisk.duplicateMovieClip("Ikona"+i, map_klip.getNextHighestDepth());
       
         map_klip["Ikona"+i]._x = this["x_ikona"+i];
         map_klip["Ikona"+i]._y = this["y_ikona"+i];
          map_klip["Ikona"+i].przycisk.loadMovie("http://localhost/~MP/"+this["ikona"+i]);
          }


Pod tymi tworzonymi dynamicznie przyciskami mam akcje onPress {trace(this._name)}

I niestety okazuje się że kazdy tak tworzony przycisk ma nazwę map_klip (widać to po kliknięciu)a nie tak jak bym się spodziewał Ikona+numer.
Jest w stanie ktoś coś tu poradzić? Czy można używać duplicateMovieClip z poziomu sceny do klipów głębiej zagnieżdżonych(w sensie klip w klipie)? Bo mam wrazenie że tu może byc problem. Wcześniej miałem tą pętle tworzącą przycisku w map_klip i wtedy prawidłowo wyświetlało nazwy niestety musiałem ją przenieść z pewnych powodów do sceny głównej. Wiem że chyba troche namieszałem ale naprawdę potrzebuje pomocy w tej sprawie.

[ Dodano: Pią 13 Sty, 2012 20:01 ]
Dobra dodałem pod spodem dodatkowy klip do którego wczytywany jest obrazek a na nim przeźroczysty przycisk który reaguje na klik.
Inna kwestia. W scenie1 mam mape na której właśnie pojawiają się te przyciski. Po kliku chciałbym aby pojawiał się panel z tekstem, zdjęciami itp natomiast mapa przyciemniała się jak w lightboxie. Myślałem że wystarczy te zdjęcia, teksty umieścić w scenie2 a scene1 ustawić jako tło. Ale w takim przypadku animacja nie zatrzymuje się w scenie1 tylko odrazu przechodzi do sceny2.
W jaki sposób zrobić aby przejsice do sceny2 było dopiero po kliku a scena1 była tłem dla sceny2?

Januszr - Sob 14 Sty, 2012 12:46

A jakbyś ładował SWF poprzez loadMovie czyli png z akcją przycisku i wykorzystał LocalConnection?
krzywy105 - Sob 14 Sty, 2012 14:32

Czyli zamiast umieszczać treści w scenie2 stworzyć oddzielnego swf tak?
I ładować go po kliknięciu na ikone na środek sceny? Z sceny1 musi być do niego przekazane w sumie tylko ID ikony w którą kliknięto aby można było załadować odpowiednie dane typu opis, zdjęcia itp? Czy ten załadowany swf może wykonywać wszytko to co zwykły flash czyli chodzi mi głównie o pobranie zmiennych z php czy załadowanie zdjęć? Czy zmienne które są w scenie głównej będą również widoczne w ładowanym swf czy też właśnie do przekazania ich (czyli głównie ID ikony) służy właśnie localconnection?
Sory za tak dużo pytań ale chciałbym rozwiać wątpliwości które mam aby się potem nie okazało że jednak tak się nie da. :)

Januszr - Sob 14 Sty, 2012 15:51

Może źle zrozumiałem...
Jeżeli masz problem z załadowaniem png do przycisku to nie ładuj png tylko gotowy swf, który jest przyciskiem. W takim przypadku trzeba wykorzystać localconnections, czyli komunikację pomiędzy swfami. Co można przekazać? Zmienne, odniesienia do klatek filmu, itd. Zerknij na ten przykład:
http://blog.swishzone.com/?p=3890
albo lokalnie:
http://swish.wodip.opole....localconnection
http://swish.wodip.opole....localconnection
http://swish.wodip.opole....localconnection

krzywy105 - Sob 14 Sty, 2012 18:47

No tam sprawa była dziwna bo przyciski są tworzone dynamicznie i po wczytaniu png do takiego dynamicznego przycisku nie wykonywał się kod w nim zawarty tak jak myślałem. Tworzone były w pętli i nazwy się zmieniały przy każdym przebiegu petli (Ikona1,Ikona2, itd). Przycisk ktury był dynamicznie powielany miał kod onPress {trace(_this.name)}. To poto aby sprawdzić czy będzie można rozróżnić potem przyciski po nazwie. Niestety nie działa to tak jak chce.

Ale mam inne pytanie jak zrobić aby klik przycisku powodował załadowanie do kontenera pliku swf i wysłanie do niego zmiennej. Wiem jak załadować natomiast nie wiem jak wysłać i odebrać potem zmienną. Mógłbyś podać jakiś prosty przykład?

[ Dodano: Sob 14 Sty, 2012 21:26 ]
W jednym z linków które podałeś ktoś pisze że do komunikacji między swf ładowanymi do jednego swf służą zmienne globalne ale u mnie nie widzi tych zmiennych w swf który jest wczytywany do głównego.

Dobra okazało się że aby zmienne globalne były widoczne to obydwa pliki muszą być w tym samym katalogu.

[ Dodano: Nie 15 Sty, 2012 19:25 ]
No to inna sprawa.

Jak zrobić aby po naciśnięciu odpowiedniego przycisku klipy wjeżdżały i wyjeżdżały na scenę?
Mam przykładowo 4 przyciski. Naciśnięcie pierwszego powoduje wjechanie klipu1; drugiego wyjechanie aktualnego i wjechanie klipu2. Chodzi mi o to że gdy naciskamy przycisk nie wiemy który klip jest na scenie wiec jak mamy określić który ma wyjechać? Chcę po prostu aby naciśnięcie przycisku powodowało wyjechanie klipu ze sceny niezależnie który to jest dokładnie klip i wjechanie odpowiedniego. Jak to uzyskać (już pomijam wstawianie efektu ruch bo to jest oczywiste).

[ Dodano: Pon 16 Sty, 2012 13:07 ]
Trochę pisze sam ze sobą ale..
Jak zrobić preloader do łądowanego jpg?

Mam taki kod który w 13 klatce ładuje jpg do klipu:

Kod:

  onFrame (13)  {
      map_klip.mapa.loadMovie("http\\localhost\obraz.jpg");
     
  }


[/code]

Januszr - Pon 16 Sty, 2012 19:12

Pisanie do samego siebie ma tę zaletę, że na pewno wymieniasz posty z osobą równie inteligentną ;P

Ładowanie zewnętrznych plików z preloaderem:
http://blog.swishzone.com/?p=3426

krzywy105 - Sro 18 Sty, 2012 18:31

Czy jest jakiś sposób ustawienia punktów transformacji aby wyśrodkować wczytywany swf względem sceny?
Chodzi o to aby ten wczytywany swf był na środku bez względu na jego rozmiar.
Jeśli mc do którego wczytuje jest pusty to wczytuje lewy górny róg ładowanego swf do punktu gdzie jest umieszczony mc. Natomiast jeśli dam temu mc rozmiar sceny to wtedy ładowany swf ustawia się górnym lewym rogiem do punktu gdzie jest zaznaczony punkt transformacji a chce żeby wczytał się na środek.

Januszr - Sro 18 Sty, 2012 19:24

Cytat:
Czy jest jakiś sposób ustawienia punktów transformacji aby wyśrodkować wczytywany swf względem sceny?

Tak, podziel wysokość stage na dwa, szerokość także i pozycjonuj w ten sposób MC.
Jakieś informacje załączyłem w przeszłości tutaj: http://swish.wodip.opole....pic.php?p=21385
Ewentualnie zaadoptuj to:
Twój_MC._x = Stage.width/2
Twój_MC._y = Stage.height/2
I jak coś nie działa to załącz swi, bo łatwiej mi się naprawia niż pisze od początku...

espe1 - Sro 18 Sty, 2012 20:21

Ponieważ sm4 nie podaje/oblicza rozmiarów ładowanego pliku, trzeba do każdego ładowanego pliku obliczać ręcznie:
Kod:

onFrame (1) {
_root.createEmptyMovieClip("holder", 1);
_root.holder.loadMovie("film.swf");
_root.holder._x = 130 //(szerokość sceny - szerokość filmu)/2;
_root.holder._y = 110 //(wysokość sceny - wysokość filmu)/2;
}


liczy, ale przez funkcję przy ładowaniu - patrz niżej

krzywy105 - Sro 18 Sty, 2012 20:21

Tak tylko nie znając z góry rozmiaru swf to w taki sposób chyba się nie da. Bo z tego co zauważyłem wczytywany swf zawsze ma punkt transformacji ustawiony na lewy górny róg. Chyba że można już po wczytaniu w jakiś sposób skryptem przestawić ten punkt?

Próbowałem po wczytaniu pobierać wartość _width i _height MC (bo wtedy dało by się wyliczyć środek) ale to podaje złe wyniki i często losowe w pewnych granicach.

Żeby załączenie pliku swi miało sens muszę go przerobić bo teraz pobiera dane z bazy i ciężko by było o dobre działanie. Ale jak nic nie wymyśle to przerobie i załączę.

espe1 - Sro 18 Sty, 2012 20:53

centrowanie działa przez tego loadera (do ściągnięcia i przerobienia)

http://blog.swishzone.com/?p=3426

czyli:

1. tworzymy pustego mc o nazwie "container"
2. w scenie_1 wpisujemy:

Kod:

onSelfEvent(load) {
var mcListener = new Object();
    mcListener.onLoadInit = function(tmc) {
        tmc._x = Math.round((Stage.width/2) - tmc._width/2);
        tmc._y = Math.round((Stage.height/2)- tmc._height/2);
        tmc.play();
}
var mcLoader = new MovieClipLoader();
    mcLoader.addListener(mcListener);
}
onFrame (1) {
    mcLoader.loadClip("plik.swf", this.container);
}


można też tworzyć przyciski z kolejnymi akcjami ładowania plików:
Kod:

on(release) {
    mcLoader.loadClip("plik2.swf", this.container);
}


Centrowanie źle działa, jeśli:
- ładowany swf nie ma tła w postaci shape lub zdjęcia
- ładowany swf ma tło, lub element który wystaje poza scenę

krzywy105 - Pią 20 Sty, 2012 12:30

No właśnie te wymiary pobierane przez swisha dotyczą tylko pierwszej klatki i właśnie biorą pod uwagę elementy animacji tzn jeśli wystają poza obszar sceny albo są małe to wymiar jest do tego dostosowywany. Zdecydowałem że wymiar animacji będzie pobierał PHP i wysyłał do flasha. Teraz centrowanie działa prawidłowo.

[ Dodano: Pią 20 Sty, 2012 19:48 ]
Jest gdzieś jakiś tutorial na temat wykonania prostego playera mp3?
Chce wykonać taki ale za bardzo nie wiem jak się za to zabrać. Te z komponentów są za duże i nie wiem za bardzo jak przekazywać do nich dynamicznie plik mp3 którego ścieżka będzie pobierana z bazy danych.
Jeśli ktoś dysponuje materiałami odnośnie audio w swishu to byłbym wdzięczny za podzielenie się.


Powered by phpBB modified by Przemo © 2003 phpBB Group