Moviclip per Action Scripts verschieben

John86

Mitglied
Hallo zusammen,
habe ein kleines Problem. Ich habe einen mc den ich per as verschieben möchte, hab auch schon ein passendes Script dafür gefunden, aber leider ist es mit diesem nur möglich, den mc auf der x oder y Achse zu verschieben! Für meine Zwecke müsste man aber das ganze horizontal und vertikal verschieben und gleichzeitig hat der mc auf jedem Koordinaten Punkt eine andere Schräglage, also quasi mit einem Klick 3 Werte ändern. Hab schon die ganze zeit versucht das umzuschreiben, aber leider komme ich kein stück weiter, kann mir hier vielleicht jemand helfen?

lg artur
Code:
var buttons = new Array(button1, button2, button3, button4, button5, logo); // Buttons in einem Array ablegen

var positions = new Array(388, 473, 586, 693, 760, 92.5); // Positionen des mc's auf x Achse

for (var i=0; i<buttons.length; i++) {
  buttons[i].dx = positions[i];
  buttons[i].onRollOver = function() {
    slideTo(this.dx);
  }
}

function slideTo(dx) {
  menue.onEnterFrame = function() {        //menue=instanzname des mc's
    this._x += (dx - this._x) / 4;
    if (Math.abs(dx - this._x) < 1) this._x = dx;
    if (this._x == dx) delete this.onEnterFrame;
  }
}
 

1manni1

Erfahrenes Mitglied
Willst du deinen MC nur einmal verschieben oder immer wieder anderst wenn man einen anderen Button dürckt?

Code:
aber leider ist es mit diesem nur möglich, den mc auf der x oder y Achse zu verschieben! Für meine Zwecke müsste man aber das ganze horizontal und vertikal verschieben und gleichzeitig hat der mc auf jedem Koordinaten Punkt eine andere Schräglage, also quasi mit einem Klick 3 Werte ändern.

vertical und horizontal ist ja nichts anderes wie die x und y Position verändern.
Das geht mit dem Script welches du ob gepostet hast schon. Du musst nur ein neues Array zB positionsy anlegen.
Dann diesen wert als Variable bei jedem Button speichern
Code:
buttons[i].dy = positionsy[i];

Und dann die Funktionumbauen damit der mc sich auch nach untern bzw oben verschiebt.

Code:
function slideTo(dx, dy) {
	menue.onEnterFrame = function() {
		this._x += (dx-this._x)/4;
		if (Math.abs(dx-this._x)<1) {
			this._x = dx;
		}
		
		this._y += (dy-this._y)/4;
		if (Math.abs(dy-this._y)<1) {
			this._y = dy;
		}
		
		if (this._x == dx && this._y == dy) {
			delete this.onEnterFrame;
		}
	};
}

Allerdings das mit der der Schräglage habe ich nicht verschanden.

*Konnte die Scripts nicht testen da ich ja keine .fla habe ;)
 

John86

Mitglied
danke für den tip, habs jetzt aber mit etwas hilfe selbst halb gelöst, hab zwar die rotation drin, aber die wirkt ziemlich ruckartig:(:
Code:
var buttons = new Array(button1, button2, button3); // Buttons in einem Array ablegen

var positions = new Array(388, 473, 586);	// Positionen des punktes X_
var positions2 = new Array(388, 473, 586);	// Positionen des punktes Y_
var rotations = new Array(45, 90, 135);		// Rortations Angaben

for (var i=0; i<buttons.length; i++) {
  buttons[i].dx = positions[i];
  buttons[i].dy = positions2[i];
  buttons[i].r = rotations[i];
  buttons[i].onRollOver = function() {
    slideTo(this.dx, this.dy, this.r);
  }
}

function slideTo(dx, dy, r) {
  punkt.onEnterFrame = function() {       			 //punkt=instanzname
    this._x += (dx - this._x) / 4;					
    if (Math.abs(dx - this._x) < 1) this._x = dx;
    if (this._x == dx) delete this.onEnterFrame;
	
	this._y += (dy - this._y) / 4;
    if (Math.abs(dy - this._y) < 1) this._y = dy;
    if (this._y == dy) delete this.onEnterFrame;
	
	this._rotation = r;

  }
}
 
Zuletzt bearbeitet:

1manni1

Erfahrenes Mitglied
Das liegt daran das du es nicht langsam rotierenlässt sondern auf einmal.
Code:
this._rotation = r;
Du musst das selbe bei _rotation wie bei _y und _x machen ... kannste ja einfach wieder kopieren
Wenns dann immer noch ruckelt könntest du die Framerate höher stellen

So wie du es gemacht hast, ist es auch nicht sichergestellt das eine Verschiebung vollstädig beendet ist da du das onEnterFrame löschst sobald die Verschiebung der x bzw y Koordinate beendet ist.

Dies kannst du ja von mir wie oben schon gepostet beheben.
Code:
if (this._x == dx && this._y == dy) {
			delete this.onEnterFrame;
		}
 

John86

Mitglied
das war ist ja mein problem! ich bin kein programierer und mache nur relativ selten was mit flash, deshalb blicke ich da nicht ganz durch. wodurch müsste ich den das _y bzw. das x_ austauschen? _rotation?
 

John86

Mitglied
manchmal binn ich echt bräsig :rolleyes: habs jetzt! juhu! danke für deine hilfe 1manni1!
Code:
var buttons = new Array(button1, button2, button3); // Buttons in einem Array ablegen

var positions = new Array(388, 473, 586);	// Positionen des punktes X_
var positions2 = new Array(388, 473, 586);	// Positionen des punktes Y_
var rotations = new Array(45, 90, 135);		// Rortations Angaben

for (var i=0; i<buttons.length; i++) {
  buttons[i].dx = positions[i];
  buttons[i].dy = positions2[i];
  buttons[i].r =  rotations[i];
  buttons[i].onRollOver = function() {
  slideTo(this.dx, this.dy, this.r);
  }
}

function slideTo(dx, dy, r) {
  punkt.onEnterFrame = function() {       			 //punkt=instanzname
    this._x += (dx - this._x) / 4;					// Formel für 
    if (Math.abs(dx - this._x) < 1) this._x = dx;
    if (this._x == dx) delete this.onEnterFrame;
	
	this._y += (dy - this._y) / 4;
    if (Math.abs(dy - this._y) < 1) this._y = dy;
    if (this._y == dy) delete this.onEnterFrame;
	
	this._rotation += (r - this._rotation) / 4;
    if (Math.abs(r - this._rotation) < 1) this._rotation = r;
    if (this._rotation == r) delete this.onEnterFrame;

  }
}
 

1manni1

Erfahrenes Mitglied
_x und _y sowie auch _rotation sind Eigenschaften eines MovieClips.
Dabei gibts noch mehr. Man kann diese Eigenschaften praktisch wie Variablen verwenden.

So müsste das in etwa sein.

Code:
function slideTo(dx, dy, r) {
	menue.onEnterFrame = function() {
		this._x += (dx-this._x)/4;
		if (Math.abs(dx-this._x)<1) {
			this._x = dx;
		}
		
		this._y += (dy-this._y)/4;
		if (Math.abs(dy-this._y)<1) {
			this._y = dy;
		}
		
		this._rotation += (r-this._rotation)/4;
		if (Math.abs(r-this._rotation)<1) {
			this._rotation = r;
		}
				
		if (this._x == dx && this._y == dy && this._rotation == r) {
			delete this.onEnterFrame;
		}
	};
}