SWiSH Forum Strona Główna SWiSH Forum
Forum użytkowników programów SWiSH

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload

Poprzedni temat «» Następny temat
Jak zatrzymać obiekt?
Autor Wiadomość
roland 
Site Admin
Roland Zimek



Wersja SWiSH: Max4
Pomógł: 31 razy
Wiek: 57
Dołączył: 21 Sty 2005
Posty: 424
Skąd: Opole
Wysłany: Sro 24 Cze, 2009 09:30   Jak zatrzymać obiekt?

Jak zatrzymać obiekt?

Zakładam, że wykorzystujemy do poniższych rozważaniach jedynie właściwości fizyczne obiektu. Gwoli przypomnienia, aby używać właściwości fizycznych w animacji:
1. Wybieramy zakładkę Export (to ta z prawej strony ekranu). Z listy rozwijanej Export options for wybieramy Script i zaznaczamy Support physics properties.
2. Wskazujemy duszka i ponownie przechodzimy do zakładki Export.
3. Z rozwijanej listy Export options for wybieramy Selected Object.
4. Zaznaczamy Uses physics properties.

OK. A teraz przykład. Tworzę duszka o nazwie Czerwona. W Scene_1 wpisuję następujący skrypt:
Kod:
onLoad () {
    Czerwona._vx = 50;
  }

Czyli, w momencie uruchomienia animacji nadaję duszkowi Czerwona prędkość poziomą 50. Będzie się on poruszał ze stałą prędkością. Chciałbym jednak, aby zatrzymał się, gdy osiągnie współrzędną 500. Dla tego duszka tworzę więc skrypt:
Kod:
onEnterFrame(includingFirstFrame) {
    if (this._x > 500) {
        this._vx = 0;
    }
}

Czyli, jeżeli współrzędna przekroczy wartość 500, ustawiam prędkość 0. Duszek się zatrzymuje.

Dorysujmy jednak drugiego duszka o nazwie Niebieska. Zmodyfikujmy skrypt wykonywany dla Scene_1, tak aby nadać mu przyspieszenie:
Kod:
onLoad () {
    Czerwona._vx = 50;
    Niebieska._ax = 50;
}

Po osiągnięciu współrzędnej 500 chcemy, aby obiekt łagodnie się zatrzymał. Wpisujemy więc następujący skrypt:
Kod:
onEnterFrame(includingFirstFrame) {
    if (this._x > 500) {
        this._ax = -100;
    }
}

Jednak obiekt po zatrzymaniu się posiada cały czas ujemne przyspieszenie, więc zaczyna się poruszać w przeciwną stronę.
Zmodyfikujmy skrypt:
Kod:
onEnterFrame(includingFirstFrame) {
    if (this._x > 500) {
        this._ax = -100;
    }
    if (this._vx < 0) {
        this._ax = 0;
        this._vx = 0;
    }
}

Czyli: jeżeli prędkość obiektu będzie mniejsza od zera, to zarówno przyspieszenie i prędkość mają zostać wyzerowane.
Na pierwszy rzut oka jest wszystko OK. Niestety obiekt Niebieska dalej będzie się poruszał wstecznym ruchem (będzie to bardzo powolny ruch).
Dlaczego? Przecież nadaliśmy mu zarówno przyspieszenie jak i prędkość równą 0. Tak ale przez ułamek skryptu nadal posiada przyspieszenie -100. To przyspieszenie nadane na początku skryptu obowiązuje przez kilka wierszy, aż je nie wyzerujemy.

Powyższy przykład znajduje się w przykładzie Movie1.

Aby zatrzymać obiekt Niebieska, należałoby dla niego zmodyfikować skrypt, na przykład na następujący:
Kod:
onEnterFrame(includingFirstFrame) {
    if (this._x > 500 and this._vx > 0) {
        this._ax = -100;
    } else if (this._x > 500) {
        this._ax = 0;
        this._vx = 0;
    }
}

Nie wymaga chyba to wyjaśnień. Plik Movie2.

I jeszcze jedno. Jak traktować właściwości fizyczne, szczególnie jeżeli chodzi o prędkość i przyspieszenie. Należy te właściwości dokładnie tak samo jak w przypadku samochodu. Jeżeli samochód ma przyspieszenie dodatnie to powoduje to tak naprawdę zwiększanie prędkości. A czy nadanie przyspieszeniu wartości 0 spowoduje zatrzymanie samochodu. Nie, samochód będzie się poruszał ze stała prędkością.

Movie2.zip
Pobierz Plik ściągnięto 667 raz(y) 1.92 KB

Movie1.zip
Pobierz Plik ściągnięto 674 raz(y) 1.89 KB

 
     
adammisiek 
Początkujący


Dołączył: 01 Sie 2009
Posty: 2
Skąd: Ełk
Wysłany: Sob 01 Sie, 2009 19:05   

a czy można by dostać jakąś pomoc.. w zderzaniu obiektów ?
np. jedną kulką z funkcją MouseDraggingUnlocked uderzamy w drugą kulkę i ona odskakuje, a okienko animacji zachowuje się jak realny świat czyli np. ma grawitację co spowoduje, że kulki będą spadały na "ziemię" ?
_________________
Adam
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Nowe zasady dotyczące cookies. Wykorzystujemy pliki cookies, aby nasz serwis lepiej spełniał Państwa oczekiwania. Można zablokować zapisywanie cookies, zmieniając ustawienia przeglądarki.
         
Strona wygenerowana w 0.2 sekundy. Zapytań do SQL: 16