"Efektowne menu" inaczej...

Technologia Flash, czyli animacja na potrzeby stron WWW to świat daleko odbiegły od zwykłego programowania i kodu. Zapytaj o pomoc i podziel się z nami Twoimi problemami z zakresu Flasha.
Arczello
Nowy
Nowy
Posty: 94
Rejestracja: śr cze 18, 2003 1:18 pm
Lokalizacja: Otwock
Kontakt:

"Efektowne menu" inaczej...

Post autor: Arczello »

Witam.

Chciałem sobie przerobić plik z tutoriala:
http://www.webinside.pl/flash/tutoriale/72
...tak aby prostokąt poruszał się względem osi Y. Zamieniłem więc "x" na "y".

Jednak działa to nieco dziwnie. Prostokąt porusza się nieznacznie, gdy kursor jest w górnej części (obróconego oczywiście o 90 stopni) menu.

Wie ktoś dlaczego?
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: "Efektowne menu" inaczej...

Post autor: Marek_bf »

Zmieniłeś też _xmouse na _ymouse?
I zmień nazwę zmiennej mx na jakąś inna, bo jest ona słowem zarezerwowanym i może powodować konflikty we flash-playerze 7
Arczello
Nowy
Nowy
Posty: 94
Rejestracja: śr cze 18, 2003 1:18 pm
Lokalizacja: Otwock
Kontakt:

Re: "Efektowne menu" inaczej...

Post autor: Arczello »

Wszystko wyglądało tak:

Kod: Zaznacz cały

onClipEvent (enterFrame) {
	//w każdej klatce
	if (_root.pasek.hitTest(_root._ymouse, _root._ymouse, true)) {
		//jeśli kursor jest na pasku menu
		//ustaw zmienną pozycji y kursora

		my = _root._ymouse;
	}
	//predkosc jest równa odległości między pozycją y kursora,
	//a pozycją y ramki podzieloną przez 5
	//zmiennej d przypisujemy tę wartość
	d = (my-this._y)/5;
	//dodajemy prędkość...
	this._y += d;
} 
Właściwie to mam nieco zmienioną postać kodu:

Kod: Zaznacz cały

onClipEvent ( load ) { 
   poczy = this._y; 
} 
onClipEvent (enterFrame) { 
   //w każdej klatce 
   if (_root.pasek.hitTest(_root._ymouse, _root._ymouse, true)) { 
      //jeśli kursor jest na pasku menu 
      //ustaw zmienną pozycji y kursora 
      my = _root._ymouse; 
   } else { 
      my = poczy; 
   } 
   //predkosc jest równa odległości między pozycją y kursora, 
   //a pozycją y ramki podzieloną przez 5 
   //zmiennej d przypisujemy tę wartość 
   d = (my-this._y)/5; 
   //dodajemy prędkość... 
   this._y += d; 
} 
tak by prostokąt wracał do y=0 ale w obydwu przypadkach kod nie działa jak należy...
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: "Efektowne menu" inaczej...

Post autor: Marek_bf »

Kod: Zaznacz cały

onClipEvent (load) {
	var poczy = this._y, speed = 1, my, d;
}
onClipEvent (enterFrame) {
	if (_root.pasek.hitTest(_root._xmouse, _root._ymouse, true)) {
		my = _root._ymouse;
		d = (my - this._y) / 5;
		this._y += d;
	} else {
		this._y -= speed;
	}
}
Arczello
Nowy
Nowy
Posty: 94
Rejestracja: śr cze 18, 2003 1:18 pm
Lokalizacja: Otwock
Kontakt:

Re: "Efektowne menu" inaczej...

Post autor: Arczello »

No fajnie, tylko prostokącik nie wraca do początkowej pozycji. Leci wyyyysoko, nie wiem czy nie do nieskończoności :)

Próbowałem przypisać zamiast this._y -= speed; coś innego będącego odwołaniem do tej właśnie początkowej pozycji. this._y = 0; sprawia, że prostokąt natychmiastowo (po opuszczeniu przez kursor paska menu) znajduje się w y=0 filmu.
A jak zrobić by wracał sobie z jakąś tam prędkością do pozycji, w której był na początku albo do początku paska?
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: "Efektowne menu" inaczej...

Post autor: Marek_bf »

Zapomniałem o sprawdzaniu jednego warunku:

Kod: Zaznacz cały

onClipEvent (load) { 
   var poczy = this._y, speed = 1, my, d; 
}
onClipEvent (enterFrame) {
	if (_root.pasek.hitTest(_root._xmouse, _root._ymouse, true)) {
		my = _root._ymouse;
		d = (my - this._y) / 5;
		this._y += d;
	}
	if (!_root.pasek.hitTest(_root._xmouse, _root._ymouse, true)) {
		if (this._y >= poczy) {
			this._y -= speed;
		}
	}
}
Szybkość ustawiasz w zmiennej speed
Arczello
Nowy
Nowy
Posty: 94
Rejestracja: śr cze 18, 2003 1:18 pm
Lokalizacja: Otwock
Kontakt:

Re: "Efektowne menu" inaczej...

Post autor: Arczello »

Dzięki serdeczne.

Pozdrowienia.
ODPOWIEDZ