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

Podstawy języka skryptowego - Lekcja 7. Zmiana właściwości obiektu

roland - Pon 22 Sie, 2005 09:31
Temat postu: Lekcja 7. Zmiana właściwości obiektu
Na początku spróbujemy obrócić obiekt. Zakładam, że narysowany obiekt posiada nazwę Prostokat.

Aby wpłynąć na właściwość obiektu, taką jak na przykład jego obrót należy po nazwie obiektu wpisać nazwę zmienianej cechy (w tym przypadku, obrót jest oznaczony jako _rotation). Nazwę obiektu rozdziela się od jego właściwości kropką. Ostatecznie więc, działający przykład może wyglądać następująco:
Kod:
onLoad () {
    Prostokat._rotation = 60;
}

Innymi słowy, obiektowi o nazwie Prostokat, przypisaliśmy nową wartość kąta obrotu _rotation, która wynosi 60 stopni. Zmiana właściwości obiektu nastąpi oczywiście w momencie uruchomienia animacji. Jeżeli jednak zatrzymasz animację, to w oknie roboczym obiekt powróci do swojej poprzedniej postaci.

Możesz także obrócić obiekt w przeciwnym kierunku, w tym celu wystarczy wpisać znak minus przed kątem obrotu:
Kod:
onLoad () {
    Prostokat._rotation = -60;
}


Chcąc zmienić kąt obrotu kilku obiektów (o przykładowych nazwach Prostokat i Elipsa), możesz zastosować jeden z trzech przykładów:
Kod:
onLoad () {
    Prostokat._rotation = 60;
    Elipsa._rotation = 60;
}

W tym przypadku przypisujesz kąt obrotu wprost poszczególnym obiektom.

Kod:
onLoad () {
    x = 60;
    Prostokat._rotation = x;
    Elipsa._rotation = x;
}

Ten przykład bardzo dobrze się sprawdza, gdy często chcesz zmieniać kąt obrotu, a nie chcesz zmieniać tej wartości w kilku miejscach kodu. Możesz skorzystać z tej wersji, gdy kąt obrotu będziesz obliczał na podstawie wzoru matematycznego.

Kod:
onLoad () {
    Prostokat._rotation = 60;
    Elipsa._rotation = Prostokat._rotation;
}

Z kolei ten przykład jest szczególnie ciekawy, gdyż kąt obrotu obiektu Elipsa, został ustalony na podstawie kąta obrotu obiektu Prostokat.

Modyfikacja ostatniego przykładu, pozwala na uzyskanie przykładowo kąta obrotu Elipsy zawsze większego od kąta obrotu Prostokata o 20 stopni:
Kod:
onLoad () {
    Prostokat._rotation = 60;
    Elipsa._rotation = Prostokat._rotation+20;
}


Spróbuj poeksperymentować z większą liczbą obiektów i innymi ustawieniami. Możesz także wypróbować operacje matematyczne, wykonywane bezpośrednio na właściwościach obiektów:
Kod:
onLoad () {
    Prostokat._rotation = 60;
    Elipsa._rotation = Prostokat._rotation+20;
    Gwiazda._rotation = Elipsa._rotation + Prostokat._rotation;
}

W tym przypadku kąt obrotu obiektu Gwiazda, został obliczony na podstawie kątów obrotów pozostałych obiektów. Czy wiesz ile on wyniesie?

maru - Pią 05 Sty, 2007 21:50

bardzo fajnie wytlumaczone:)

a jak skierowac obiekt w jakas wskazana strone. powiedzmy tak zeby wieka strzalka na srodku ekranu podazala za kursorem? chodzi o to jak pobrac kat miedzy obiektami i skierowac jeden w strone drugiego?

roland - Pon 08 Sty, 2007 08:07

Aby skierować dowolny obiekt w kierunku, w którym znajduje się myszka, musimy powiedzieć jak sprawdzić jej położenie w obszarze animacji.

Po pierwsze należy zdawać sobie sprawę, iż lewy górny narożnik obszaru animacji, ma współrzędne (0,0), a prawy dolny narożnik, takie jaką szerokość i wysokość ustaliliśmy w zakładce Movie (pol. Animacja).

Współrzędne kursora myszy sprawdzimy przy pomocy _xmouse oraz _ymouse.

Wpiszmy następujący skrypt:
Kod:
onEnterFrame(includingFirstFrame) {
    trace(_xmouse+"  "+_ymouse);
}

spowoduje on wyświetlenie w oknie Debug, współrzędnych X i Y wskaźnika myszy.

Jeżeli jednak powyższy skrypt umieścimy wewnątrz obszaru duszka, to odczytamy położenie kursora myszy względem punktu zakotwiczenia duszka. Chcąc dowiedzieć się, jakie położenie kursora myszy jest względem obszaru animacji, musimy zmodyfikować nasz skrypt następująco:
Kod:
onEnterFrame(includingFirstFrame) {
    trace(_root._xmouse+"  "+_root._ymouse);
}

Zapis _root powoduje, że odwołujemy się do "głównej animacji".

Przydałoby się jeszcze opisać, w jaki sposób sprawdzić jakie jest położenie punktu zakotwiczenia duszka, bądź innego obiektu (UWAGA. Czasami punkt zakotwiczenia obiektu/duszka pokrywa się z jego środkiem, nie jest to jednak reguła).
Skorzystamy tutaj z poleceń this._x oraz this._y.
Można także uprościć te zapisy, do zwykłych _x oraz _y.

Reszta, to już zwykła matematyka.

Aby obrócić duszka o nazwie Kierunek w kierunku wskaźnika myszy, należy więc wprowadzić piniższy skryt dla tegoż duszka:
Kod:
onEnterFrame(includingFirstFrame) {
    Xm = _root._xmouse-this._x;
    Ym = _root._ymouse-this._y;
    kat = (Math.atan(Ym/Xm) * 180) / Math.PI;
    kat += (_root._xmouse < this._x) ? 180 : 0;
    _root.Kierunek._rotation = kat;
}


Poniżej do pobrania plik z gotową animacją.

5uck - Sro 16 Sty, 2008 12:50

Czy da radę zrobić kwadrat który porusza się w poziomie po animacji, w zależności od tego gdzie znajduje się myszka?
np: myszka znajduje się na środku animacji: kwadrat nie rusza się, razem z ruchem myszki w prawo np o 1cm kwadrat przyspiesza w prawo o 1cm/sec, 2cm=2cm/sec. Kwadrat po opuszczeniu animacji z prawej strony zmienia swoje położenie i przechodzi na początek animacji (lewy bok) i porusza się dalej z prędkością jaką nadaje mu położenie poziome myszki.

yanek83 - Czw 08 Maj, 2008 21:49
Temat postu: kontynuacja pytania :)
jak w TEN sposób poruszać obiektami? funkja Math.approach daje jakieś rezultaty ale sprawia troche kłopot poniewać obiekty nadrzędne (parent.) niestety ale jakoś nie przesuwają się płynnie. Dodaje plik źródłowy może ktos mi pomoze w tym ćwiczeniu :)
jerzykovsky - Wto 03 Mar, 2009 20:16
Temat postu: Oczekuje na akceptację


Powered by phpBB modified by Przemo © 2003 phpBB Group