Mausbewegung bzw. Weg als Parameter

Mayday171

Erfahrenes Mitglied
Hallo,

Ich habe mir ein Viewer für gerenderte Bilder gebastelt und bin zur Zeit an der Umsetzung der Oberfläche.

Es geht um die Bewegung des 3D objektes mit der Maus bzw. die horizontale Bewegung.
Das 3D Objekt soll sich dann bewegen wenn die Maus gedrückt und zur entsprechenden Seite bewegt wurden. Ich möchte dabei gerne eine Relation zwischen Mausbewegung und Bewegung des 3D Objekts schaffen. D.h. wenn ich die maus nur ein Stück bewege soll dich das Objekt auch nur wenig bewegen und wenn ich die maus weiterbewege soll sich auch das Objekt weiter als zuvor bewegen. Ich hoffe ihr versteht was ich meine. Habe schon einen Ansatz:

PHP:
on(press) {
	delete _root.onEnterFrame        // 3D Objekt dreht sich am Anfang des Flash movies--> wird damit gestoppt
	_root.maus1=_xmouse;   /// erste Mausposition(wenn gedrückt wurde)
	onEnterFrame = function() {
		_root.maus2=_xmouse;  //zweite Mausposition, die sich je nach bewegung erhöht bzw. sinkt
		if(maus2>maus1) {              /// wenn die Bewegung nach rechts geht
			_root.can.bewegen(10);
		}
		if(maus2<maus1) {           /// und wenn sie nach Links geht
			_root.can.bewegen(-10);      // Funktion wird aufgerufen, die das Objekt drehen lässt --> der Parameter ist dabei die Größe der Drehung
		}
	}
}

on(release) {
	delete this.onEnterFrame;
	delete _root.onEnterFrame
}


Ich hoffe ihr versteht mein Problem einigermaßen und könnt mir dabei helfen bzw. mir einen Denkanstoß geben.

Danke

MfG
 
Das ganze funktioniert so:

PHP:
if(x>0) {
		
				if((this.ct._width>0 && this.ct._height>0) || (this.ctersatz._width>0 && this.ctersatz._height>0)) {            // wenn die Bilder geladen sind
					if(this.l==this.anzahl-1) { 							 // wenn das letzte Bild erreicht ist
						this.img[this.l]._visible=false; 				 //  zurücksetzen
						this.l=-1; 								 //
						_root.regler.kreis._x=-20;
					}      
					_root.regler.kreis._x+=300/this.anzahl
					this.img[this.l]._visible=false;		
					this.l++;
					this.img[this.l]._visible=true;	
				this.frames+=1;
				if(x<=this.frames) {
					this.frames=0;
					delete _root.onEnterFrame;
					//trace("test");
				}
			}
		}

Das wär jetzt der teil, wenn der Paramet größer als 0 ist. Das ganze steht in einer AS Datei. Ich habe vorher MovieClips erstellt in denen die einzelnen Bilder liegen und diese dann unsichbar gemacht(vorgeladen) in der Schleife mach ich sie nacheinander wieder sichtbar bzw. unsichtbar, so dass sich eine scheinbare Rotation entsteht.

Gibt es vieleicht eine Möglichkeit eine onEnterFrame Methode zu stoppen ohne diese zu löschen?

MfG
 
Hi,

Du hast also Einzelbilder, die Du nacheinander anzeigst?

Im Anhang findest Du einen Ansatz, wie ich es lösen würde (Modulo aus Mausposition und Bildanzahl als Indexnummer des anzuzeigenden Bildes verwenden).

Gruß

P.S.: "Anhalten" kannst Du eine onEnterFrame-Methode temporär, indem Du ein globales Flag setzt, das bestimmt, ob der Inhalt der Funktion ausgeführt werden soll:
Code:
var doit = true;

this.onEnterFrame = function() {
    if (doit) machWas();
}

button.onPress = function() {
    doit = !doit;
}

Gruß
.
 
Die Idee ist so einfach wie genial. Das Problem ist nur das ich keine showPicture Methode wie du hab, sondern eine spiele x bilder ab.
Das heißt, wenn du als Parameter 15 übergibst spielt er 15 Bilder ab.

Ich schicke dir mal mein komplettes fla. Hoffe du kannst mir noch ein paar tips und Verbesserungsvorschläge geben. Bin wirklich voll depremiert. Hätte es von anfang an anders machen sollen bzw. so wie du vorgeschlagen hast.

Im Hauptframe musst du an die Methode (breite,höhe,anzahl der Bilder,Pfad,Dateiname der ersten Datei(folgendes Format --> render0001,render0002,usw.) angeben

Die Bilder müssen 400 x 250 oder 400 x 300 sein.

Ist alles noch ein wenig eingeschränkt, da ich mich erst mal um die funktionalität kümmern wollte.

Danke

MfG
 

Anhänge

Hi,

nach einem Blick auf Deinen Code muss ich feststellen, dass eine komplette Neukonstruktion weniger aufwendig als eine Modifikation wäre; Dein Setup arbeitet an einigen Stellen mit (unnötigen) Codewiederholungen, in der MovieClip-Struktur herrscht ziemliche Unordnung, die teilweise Verwendung von Schaltflächensymbolen verkompliziert die Sache weiter, und der Code der Klasse ist recht unübersichtlich. :-(

Wenn man möglichst viel unverändert lassen will, solltest Du Deinen ersten Ansatz vervollständigen (vorausgesetzt, die Methode "bewegen" funktioniert wie gewünscht):
Code:
var d = maus2 - maus1; // Abstand zwischen zwei Mauspositionen
d /= 10 // ggf. nach Belieben skalieren ...
_root.can.bewegen(d); // ... und der Methode "bewegen" einfach die Änderung übergeben.

Gruß
.
 
Zurück