StarSoft Multimedia

Przykłady

Wszystkie przykłady

"go to movie" w StarMenu Xtra
Przykład użycia StarMenu Xtra


Pobierz pliki

StarMenuExample_1.zip
Opis:
Pliki źródłowe do tego przykładu
Rozmiar:
120 kB
Wymagania:
Director MX
StarMenu Xtra

Opis problemu

Jeśli w skrypcie obsługującym kliknięcie pozycji menu umieścisz bezpośrednią instrukcję go to movie, to co kilka kliknięć (ich liczba jest nieustalona) możesz otrzymać komunikat błędu o treści: "Access violation at address 06CCC80E in module 'starmenu.x32'. Read of address FFFFFFFF". Jest to spowodowane tym, że otwarcie nowego filmu powoduje natychmiastowe zamknięcie aktualnego filmu i tym samym usunięcie cast membera StarMenu Xtra z pamięci, mimo że trwa jeszcze wykonywanie jednej z jego funkcji, tzn. funkcji obsługi kliknięcia. Aby wyeliminować ten błąd, należy zastosować pewne obejście w Directorze.

Koncepcja rozwiązania

Rozwiązanie polega na tym, aby instrukcja go to movie została wykonana wewnątrz obsługi innego zdarzenia, niż kliknięcie pozycji menu (czyli on NazwaPozycji lub on MenuClick). Najlepiej do tego celu użyć zdarzenia exitFrame, gdyż jest ono zgłaszane kilkadziesiąt razy na sekundę, dzięki czemu użytkownik nie zauważy żadnego opóźnienia pomiędzy kliknięciem pozycji menu a reakcją aplikacji. Wykorzystamy dodatkowe globalne zmienne typu boolean o przykładowych nazwach GoToMovieX, pozwalające na komunikację między zdarzeniami. Każdy nowy film będzie miał własną zmienną, ustawianą na true w funkcji obsługi kliknięcia menu i odczytywaną w funkcji obsługi on exitFrame. Wartość true będzie oznaczać, że skrypt powinien wykonać skok do danego filmu.

Rozwiązanie

Oto zawartość skryptu cast membera StarMenu Xtra. Zakładamy, że mamy 3 pozycje menu o nazwach "Articles", "Pictures" i "Movies", a każda z nich ma uruchomić film .dir o nazwie odpowiednio "art.dir", "pict.dir" i "mov.dir".
-- StarMenu Xtra cast member script

global GoToMovie1, GoToMovie2, GoToMovie3

on menuClick menuItem
  if menuItem[#Name] = "Articles" then GoToMovie1 = true
  else if menuItem[#Name] = "Pictures" then GoToMovie2 = true
  else if menuItem[#Name] = "Movies" then GoToMovie3 = true
end

on exitFrame
  if GoToMovie1 then
    GoToMovie1 = false
    go to movie "art"
  end if

  if GoToMovie2 then
    GoToMovie2 = false
    go to movie "pict"
  end if

  if GoToMovie3 then
    GoToMovie3 = false
    go to movie "mov"
  end if
end

Uwaga. Aby zdarzenie exitFrame mogło zostać zgłoszone w obiekcie cast member, w aktualnej klatce musi istnieć sprite dla tego cast membera. Dlatego w oparciu o cast member StarMenu Xtra należy utworzyć sprite w całym zakresie klatek, w którym powyższy skrypt ma działać. Sprite skojarzony ze StarMenu służy do automatycznego wyświetlania menu, lecz jeśli opcja ta nie jest wykorzystywana (z powodu użycia funkcji Popup lub ModalPopup), to sprite ten może mieć wymiary 0x0 i być położony w dowolnym miejscu sceny.



Powyższą metodę należy zastosować we wszystkich StarMenu Xtra wykonujących przejście do innego filmu.

Więcej informacji o sprite'cie StarMenu i wyświetlaniu menu znajdziesz w Podręczniku.


Komentarze? -


Wszystkie przykłady

Ranking sprzedaży
Najczęściej kupowane produkty:
1. MediaPlayer Xtra
2. UltimateNet Xtra
3. StarMenu Xtra
Nowości
2008-03-27
Wszystkie nasze xtrasy są kompatybilne z Adobe Director 11.

Przetestowaliśmy nasze xtrasy w najnowszej wersji Directora (data rozpoczęcia sprzedaży 25.03.2008) i stwierdziliśmy, że większość z nich działa całkowicie prawidłowo.
10 najpopularniejszych
Najczęściej ściągane pliki:
MediaPlayer Xtra (57260)
StarMenu Xtra (23185)
MediaPlayer Exp. Xtra (18186)
DisplayMode Xtra (14347)
ProjectorLook Xtra (13315)
AnyShape Xtra (11875)
UltimateNet Xtra (11804)
MailTo Xtra (11575)
MediaPlayer Exp. Demo .exe (8624)
SmartOLE Xtra (7520)