Wszystkie przykłady
"go to movie" w StarMenu Xtra
| Pobierz pliki |
StarMenuExample_1.zip
- Opis:
- Pliki źródłowe do tego przykładu
- Rozmiar:
- 120 kB
- Wymagania:
- Director MX
StarMenu Xtra
|
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.
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.
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