jak ograniczyć random movement

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.
szpak111
Nowy
Nowy
Posty: 87
Rejestracja: pn gru 17, 2007 11:43 am

jak ograniczyć random movement

Post autor: szpak111 »

Witam! Mam prosty kod, który powoduje płynne przemieszczanie się elementu:

Kod: Zaznacz cały

onClipEvent(load){ 
    xDir=1; 
    yDir=1; 
} 
onClipEvent(enterFrame){ 
    _x+=xDir; 
    _y+=yDir; 
    if (random(10) == 0){ 
        xDir*=-1; 
    } 
    if (random(10) == 0){ 
        yDir*=-1; 
    } 
   }
Nie mam jednak kontroli nad jego położeniem, a chciałbym zeby poruszał się np max 10px w lewo/prawo/góra/dół. Kombinowałem cos z dodpisaniem warunku jesli x większy od ... to wróć do początkowego połozenia, ale wówczas element skacze i nei wygląda to ciekawie, bez sensu wtedy random. Czy ktos moglby mi podpowiedziec jak tu ograniczyc pole ruchu?
z góry dzięki
i pozdro
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: jak ograniczyć random movement

Post autor: Marek_bf »

Ja użył bym Tween

Kod: Zaznacz cały

import mx.transitions.Tween;
import mx.transitions.easing.*;
import flash.geom.Point;
// minimalna i maksymalna prędkość
var SPEED_MIN:Number = 20;
var SPEED_MAX:Number = 40;
// określenie pol,a po którym bedzie poryszał się MC
// 0x - 100x, 0y - 200y
var POINT1:Point = new Point(0, 0);
var POINT2:Point = new Point(100, 200);
// funkcja inicjująca animację
function tweening(targetMc:MovieClip):Void {
	var myTweenX:Tween = new Tween(targetMc, "_x", None.easeNone, POINT1.x, Math.random()* POINT2.x, speerRadnom(), false);
	var myTweenY:Tween = new Tween(targetMc, "_y", None.easeNone, POINT1.y, Math.random()* POINT2.y, speerRadnom(), false);
	myTweenX.onMotionFinished = tweenContinueX
	myTweenY.onMotionFinished = tweenContinueY
}
// powtarzanie animacji w osi X
function tweenContinueX(tween:Tween):Void {
	tween.continueTo(Math.random()*POINT2.x, speerRadnom());
}
// powtarzanie animacji w osi Y
function tweenContinueY(tween:Tween):Void {
	tween.continueTo(Math.random()*POINT2.y, speerRadnom());
}
// funkcja losująca szybkość animacji
function speerRadnom():Number{
	return SPEED_MIN + Math.floor(Math.random() * (SPEED_MAX - SPEED_MIN))
}
// wywołanie animacji dla MC i nazwie instancji mojMc
tweening(mojMc, POINT1, POINT2, SPEED);
szpak111
Nowy
Nowy
Posty: 87
Rejestracja: pn gru 17, 2007 11:43 am

Re: jak ograniczyć random movement

Post autor: szpak111 »

wow, powalony jestem;) wielkie dzięki, efekt idealny, sam bym na to nie wpadł.
ODPOWIEDZ