Maus bestimmt Geschwindigkeit/Richtung

Wiz

Grünschnabel
Moin moin zusammen,

Ich würde gerne eine Flash-Animation auf meine Homepage setzen, doch weiß ich nicht so recht, wie die Aktionen dazu aussehen.

Hier ein Link zu dem, was ich mir in etwa vorstelle:
http://www.emp.de/bin/shop.php?prog...ktion=LISTGROUP&nurrub=1&tc=PULLDOWN_00MALETS
(ich hoffe, der Link funktioniert..)

Die Objekte sollen sich halt nach Links im Kreis drehen und nach Rechts.
Allerdings hätte ich das gern so, dass man nicht über diese Pfeile dort gehen muss, sondern man einen Bereich definiert, in dem, wenn die Maus in der Mitte steht, sich die Objekte nicht drehen und je weiter die Maus z.B. sich nach Links bewegt, desto schneller rotieren die Objekte.

Ich nutze CS4 - eventuell wichtig.

Kann mir dabei eventuell wer helfen? ^^

mfg
Wiz
 
Zuletzt bearbeitet:
Hi Wiz,

um das zu realisieren gibt es bestimmt viele Möglichkeiten, aber ich nenn dir mal auf die Schnelle die hier. Die Idee stammt von dieser Seite: http://www.gotoandlearn.com/


1.öffne die Datei im Anhang
2. Lösche alle Elemente aus der Bibliothek, die sind nur zum testen für dich da(STRG + ENTER drücken)
3. Ziehe alle deine Fotos bei Flash auf die Bühne, dass ist in der Mitte vom Bildschirm (sicherlich nicht die eleganteste Variante, kann dir das auch per XML machen, aber das nimmt viel mehr Zeit in Anspruch und so klappt's auch)
4. Nun klickst du jedes Foto einzeln an, machst Rechtsklick -> In Symbol konvertieren... Nennst die Datei "bild1" und wählst MovieClip bei Typ, die Mitte bei Anker und machst ein Häkchen bei Export für ActionScritpt
5. Nun steht auch bild1 in dem Feld bei ActionScript drin. Wichtig ist, dass jedes weitere Bild eine höhere Zahl hat, also bild2 bild3 usw. Dann bestätigst du und löschst das element wieder von der bühne
6. Wiederhole beliebig oft schritt 4. und 5.
7. aktuell sind 3 Bilder eingestellt. Du musst eine Variable im Code ändern, die anzahl_bilder heißt. dafür rechtsklickst du in der Zeitleiste auf dieses Kästchen mit dem kleinen "a" -> und wählst "Aktionen" dort kannst du die Variable deinen Bedürfnissen anpassen

Fertig. Starten mit STRG + Enter

Gruß, Adnan
 

Anhänge

  • 3danim.fla
    70 KB · Aufrufe: 33
Zuletzt bearbeitet:
Dankeschön für die Mühe, nur kann ich die Datei im Anhang nicht öffnen... da steht simpel "Dokument konnte nicht geöffnet werden." Vielleicht in CS5 gespeichert worden?

Btw Frohes Neues an alle! ;)

mfg
Wiz

Edit: Omg... ich bin ein Idiot... ööhm, ich nutze CS3 ^.^"
 
Zuletzt bearbeitet:
Hey Wiz,

das ist echt eigenartig, dass du das nicht öffnen kannst, bei mir funktioniert die einwandfrei.

Soweit ich weiß kommt CS5 auch erst im Sommer raus...

Ich hab's jetzt einfach mal noch zusätzlich als CS3 gespeichert.

Hoffe, das funktioniert jetzt auch.

Gruß, Adnan
 

Anhänge

  • 3danimCS3.fla
    29 KB · Aufrufe: 27
Zuletzt bearbeitet:
Top!! Vielen, vielen Dank! :)

Nur fürs Verständnis (ich lerne gerne solche Sachen ^^):

Die Aktionen hab ich bis Zeile 8 verstanden... Ab dann seh ich nur Kuddlmuddl

Code:
for(var i=1;i<=anzahl_bilder;i++)
{
	var t = this.attachMovie("bild"+i, "b"+i, i+1);
	t.angle = i*((Math.PI*2)/anzahl_bilder);
	t.onEnterFrame = mover;
}

function mover()
{
	this._x = Math.cos(this.angle) * radiusX + centerX;
	this._y = Math.sin(this.angle) * radiusY + centerY;
	var s = this._y /(centerY+radiusY);
	this._xscale = this._yscale=s*100;
	this.angle += this._parent.speed;
	this.swapDepths(Math.round(this._xscale)+100);
}

this.onMouseMove = function()
{
	speed = (this._xmouse-centerX)/15000;
}

Wobei den Scale-Part in Zeile 22 rall ich auch noch... aber sonst... was steht da eigentlich? oO
 
Zuletzt bearbeitet von einem Moderator:
Ah, ich hab noch eine Frage... Das funktioniert ja alles einwandfrei - hab das Ganze auch ein wenig meinen Wünschen anpassen können.

Allerdings stört mich noch eine Sache: Wenn man mit der Maus an der Seite aus der Bühne raus geht, dreht sich das weiterhin schnell umher. Kann man da was machen, dass wieder die Ausgangsgeschwindigkeit eingenommen wird?

mfg
Wiz
 
Also, zu deinem Problem habe ich früher immer notgedrungen einen unsichtbaren Button über der Bühne erstellt, der bei verlassen die Animation stoppt.

Aber da gibt es mittlerweile auch bessere Varianten. Probier es doch mal damit aus.

Verlassen der Bühne mit Mauszeiger

Hoffe, das hilft dir weiter.

Sehe gerade auch deinen Vorletzten Post, den kann ich dir später noch beantworten, das hier vorweg, damit du schon mal hast, was du suchst.

Gruß, Adnan

Wiz:
Nur fürs Verständnis (ich lerne gerne solche Sachen ):

Okay, um ehrlich zu sein, bin ich da ein wenig überfragt. Ich weiß, dass die Kreisformel x² + y² = z ist. Hierbei ist Wurzel z der Radius, also bei 9 nen Radius von 3.

Dazu kann ich dir sagen, das cos und sinus einen Wert zwischen -1 und 1 liefern, was man dann gut als Faktor in einer beliebigen Rechnung verwenden kann, weil somit der Wert ansteigt, abfällt, ansteigt, abfällt... sofern sich nur ein Faktor fortlaufend in der Formel ändert und das ist sinus x oder cosinus x, ansonsten hast du n Kuddelmuddel und das Objekt fliegt dir davon.
Hier ist es ja auch so: Es wird 250 und die halbe Bühnenbreit hinzu addiert, also 400. Der Wert 250 wird mit dem sin x multipliztiert, wodurch er alle Wert zwischen -250 und 250 annehmen kann, womit die ganze Rechnung mindestens 150 und maximal 650 zurück liefert, solange sich der Wert von x fortlaufend ändert.

Das mit dem scale hattest du ja bereits verstanden; die Objekte werden größer und kleiner, um eine Tiefenwirkung zu erzeugen.

In diesem Fall muss man jedoch x und y unterschiedlich berechnen, da die Höhe und die Breite der Fensters nicht identisch sind, zu mal die Höhe ja hier die Tiefe darstellen soll, um uns Räumlichkeit zu vermitteln, also wir quasi ein vorne und ein hinten haben.

Mehr kann ich dir leider nicht dazu sagen, weil dafür müsste man sich dann auch intensiv mit der Sinus- und Cosinusfunktion beschäftigen der Kreisformel und wie das alles zusammenhängt.

Hoffe, ich hab dich jetzt dadurch nicht noch mehr verwirrt. :confused:

Gruß, Adnan
 
Irgendwas scheine ich falsch zu machen...

Code:
// mouse on stage detection
var predX:Number // prediction, also Vorhersage der X-Position
var predY:Number
var oldX:Number; // alte X-Position
var oldY:Number;
var offStage:Boolean; // Schalter, ob die Maus auf der Bühne ist oder nicht…

onMouseMove = function()
{

predX = _root._xmouse – oldX;
predY = _root._ymouse – oldY;
oldX = _root._xmouse;
oldY = _root._ymouse;
}

onEnterFrame = function()
{
if ((_root._xmouse + predX) >= Stage.width-10 || (_root._ymouse + predY) >= Stage.height-10 || _root._xmouse-predX

Wenn ich das raus kopiere und einfach in eine neue Aktion einfüge, sagt der mir, dass sich in "predX = _root._xmouse – oldX;" und "predY = _root._ymouse – oldY;" Fehler befinden... Muss ich da was anderes für einsetzen? o_o?

mfg
Wiz
 
Hey Wiz,

Das Minus in Zeile 11 und 12 ist irgendwie komisch.


EDIT:

Da waren noch n paar andere Zeichenfehler drinn, hab die mal alle korriegert ^^

Code:
var anzahl_bilder:Number = 3;


var radiusX:Number = 250;
var radiusY:Number = 75;
var centerX:Number = Stage.width / 2;
var centerY:Number = Stage.height / 2;
var speed:Number = 0.01;

for(var i=1;i<=anzahl_bilder;i++)
{
	var t = this.attachMovie("bild"+i,"b"+i,i+1);
	t.angle = i * ((Math.PI*2)/anzahl_bilder);
	t.onEnterFrame = mover;
}

function mover()
{
	this._x = Math.cos(this.angle) * radiusX + centerX;
	this._y = Math.sin(this.angle) * radiusY + centerY;
	var s = this._y /(centerY+radiusY);
	this._xscale = this._yscale = s*100;
	this.angle += this._parent.speed;
	this.swapDepths(Math.round(this._xscale) + 100);
}

this.onMouseMove = function()
{
	speed = (this._xmouse-centerX)/15000;
}

// mouse on stage detection
var predX:Number // prediction, also Vorhersage der X-Position
var predY:Number
var oldX:Number; // alte X-Position
var oldY:Number;
var offStage:Boolean; // Schalter, ob die Maus auf der Bühne 

onMouseMove = function()
{
if (offStage)
{
trace("Maus ist wieder auf der Stage!");
}

offStage = false;

predX = _root._xmouse - oldX;
predY = _root._ymouse - oldY;
oldX = _root._xmouse;
oldY = _root._ymouse;
};

onEnterFrame = function ()
{
if (_root._xmouse + predX >= Stage.width || _root._ymouse + predY >= Stage.height - 10 || _root._xmouse + predX <= 0 || _root._ymouse + predY <= 0)
{
trace("Maus hat die Stage verlassen!");
predX = 0;
predY = 0;
offStage = true;
}
};

Gruß, Adnan
 
Zuletzt bearbeitet:
predX = _root._xmouse oldX;

predY = _root._ymouse oldY;

Also bei mir ist zwischen xmouse und oldX und das selbige eine Zeile drunter ein unbekanntes Zeichen, und kein Minus. Schreib die Zeile mal neu und probiers dann mal aus, anderen Fehler kann ich jetzt so nicht feststellen da.

Edit: War einer schneller:p, diese Zeichen mein ich auch.
 

Neue Beiträge

Zurück