webForumDet fria alternativet

rotateTo();

6 svar · 457 visningar · startad av xhlin

xhlinMedlem sedan sep. 200576 inlägg
#1

Hallå där !
har en function rotateTo :

MovieClip.prototype.rotateTo=function(r,speed){
this.createEmptyMovieClip("rotater",this.getNextHighestDepth());
this.rotater.onEnterFrame=function(){
this._parent._rotation+=(r-this._parent._rotation)/speed;
var diffr=this._parent._rotation-r;
if((diffr*diffr)<10){
this._parent._rotation=r;
delete this.onEnterFrame;

	}
}

};

om jag vill rotera ett movieClip över 180 grader får funktionen fnatt och börjar loopa en rotation,
någon som vet hur man fixar det ?

BlixtsystemsMedlem sedan maj 2005704 inlägg
#2

Ett clips position anges mellan -180 och 180 därför blir det lite tokigt då du jämför diffr värdet.
Detta borde funka:

MovieClip.prototype.rotateTo = function(r, speed) {
	this.onEnterFrame = function() {
		this._rotation -= r/speed;
		var diffr = ((this._rotation+360)%360)-r;
		if ((diffr*diffr)<10) {
			this._rotation = r;
			delete this.onEnterFrame;
		}
	};
};
xhlinMedlem sedan sep. 200576 inlägg
#3

det funkar bättre nu men förstår mig ändå inte riktigt på den ,
skiver jag in att ett mC skall rotera 300 grader med en hast. av 10 snurrar mC:t ett par varv...ökar jag hastigheten snurrar det ännu fler varv?

mvh

BlixtsystemsMedlem sedan maj 2005704 inlägg
#4

Den fungerade inget vidare märkte jag då jag testade.
Men det här fungerar:

MovieClip.prototype.rotateTo = function(r, speed) {
	this.rAcc=r;
	this.onEnterFrame = function() {
		this.rAcc-=speed;
		this._rotation -= speed;
		if (this.rAcc<=speed) {
			this._rotation = r;
			delete this.onEnterFrame;
		}
	};
};
xhlinMedlem sedan sep. 200576 inlägg
#5

Nu funkar det ännu bättre, men den är fortfarande lite skum
vid vissa värden försvinner speed och mC:t bara 'hoppar' till den angivna graden ?

mvh

BlixtsystemsMedlem sedan maj 2005704 inlägg
#6

Ja...den blev visst lite förvirrad på lägre värden om man skall rotera moturs.

MovieClip.prototype.rotateTo = function(r, speed) {
	this.rAcc=r;
	speed = r<0 ? -speed : speed;
	this.onEnterFrame = function() {
		this.rAcc-=speed;
		this._rotation += speed;
		if ((this.rAcc>=speed && r<0) || (this.rAcc<=speed && r>0)) {
			this._rotation = r;
			delete this.onEnterFrame;
		}
	};
};

Den skall fungera i båda riktningar.
För att rotera moturs anger du ett negativt rotations värde...tex:
mc.rotateTo(-180, 3);

xhlinMedlem sedan sep. 200576 inlägg
#7

du är en klippa!

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)