Adobe Flash Mausbewegung nach Screenende auslesen

McFreaq

Mitglied
Thread Starter
Mitglied seit
28.02.2007
Beiträge
174
Hi Leute,

Ich suche einen Weg um die Bewegung der Maus (der Hardware, nicht des Cursors) kontinuierlich auszulesen.

Das heißt mir ist prinzipiell mal egal wo der Cursor am Screen gerade ist, was ich auslesen möchte ist ob die Maus generell bewegt wird. "Standardmäßig" bekomme ich ja nur die Cursorkoordinaten innerhalb des Movies, ich möchte aber auch wissen ob jemand seine Maus zB. weiter nach unten bewegt als der Screen eigentlich erlaubt - ist das halbwegs verständlich?

Ich brauche also nicht die fertigen Cursorkoordinaten am Screen , sondern die direkten Werte der Bewegung die von der Maus zum Betriebssystem/ zu Flash geschickt werden.

Ist das einigermaßen simpel zu schaffen?
 

zyntron

Neues Mitglied
Mitglied seit
10.11.2006
Beiträge
17
Hallo,

wenn 'nur' drum geht Maus-Aktivität zu erkennen hab ich das mal so gelöst:

var id:Number;
var myListener:Object = new Object();
myListener.onMouseMove = function () {
clearInterval( id );
id = setInterval( nextStop, 35000, 15);
};
Mouse.addListener( myListener );

function nextStop( wo ){
clearInterval( id );
gotoAndStop(1);


}


Dabei gings mir drum, dass nach einer bestimmten Zeit von Inaktivität (35000 ms) der Film auf Frame 1 zurückspringt.

Vielleicht hilfts dir ja weiter.

Gruss
 

McFreaq

Mitglied
Thread Starter
Mitglied seit
28.02.2007
Beiträge
174
Danke schonmal für diese Antwort, es geht schon ein bisschen in die richtige Richtung, aber ich bräuchte zusätzlich noch die Information ob die Maus gerade nach unten oder oben bewegt wird.

Vielleicht mit diesem Workaround:
+ ständig abfragen ob die Maus überhaupt bewegt wird
+ wenn sie bewegt wird Cursorkoordinaten abfragen um die Richtung rauszubekommen
+ wenn der Cursor auf 0 oder Screenhöhe/breite steht und weiter Richtung Maximum bewegt wird kenne ich die Richtung, wenn er wieder vom Rand wegbewegt wird kann ich die Richtung wieder aus den Koordinaten bestimmen

Was haltet ihr davon? Bessere/ einfachere/ direktere Vorschläge?
 

Labrar

Mitglied
Mitglied seit
07.09.2004
Beiträge
129
Kurz um. Du möchtest auch abfragen ob die Maus ausserhalb der Bühne bewegt wird. Wenn du deine swf nicht zu 100% z und 100% y skalierst geht das so nicht da du mit Actionscript nur Mausbewegungen innerhalb deines Filmes abfragen kannst. Da geht es sogar simpel via onMouseMove.

PHP:
_root.onMouseMove=function(){
trace("Maus bewegt sich");
//oder
trace("Maus bewegt sich auf der X Achse "+_xmouse+ " und auf der Y Achse "+_ymouse); 
}
Wenn du die ganze Mausaktion im Browser abfragen willst, würde ich dir Javascript empfehlen.

Oder habe ich dich falsch verstanden?

Edit:

Kann es sein daß du eine Art Scroller basteln willst der auf Mausbewegungen reagiert?
Wenn ja ist sowas mit wenigen Zeilen machbar
 

McFreaq

Mitglied
Thread Starter
Mitglied seit
28.02.2007
Beiträge
174
Ja, innerhalb der Bühne ist es natürlich kein Problem das is klar.

@ labrar
Ich möchte in der Tat die vertikale Mausbewegung benutzen um durch eine Liste von Menüpunkten durchzuscrollen, stimmt. Der Cursor auf der Bühne ist dabei nicht wichtig, es geht mir wirklich nur darum ob die Maus nach oben oder unten bewegt wird.
Wäre der in meinem letzten Post vorgeschlagene Weg der Richtige oder schwebt dir da etwas anderes vor? Das fertige swf. läuft übrigens nicht in einem Browser sondern offline auf einem Rechner.
 

Labrar

Mitglied
Mitglied seit
07.09.2004
Beiträge
129
Okay. Im Prinzip ist das ein simpler Aufbau.

Du brauchst 3 Movieclips

Movieclip A enthält deine Menüpunkte
Movieclip B dient als Maske, maskiert also MovieClip A
Movieclip C ist nur eine unsichtbare Fläche mit der du die Y Koordinaten der Maus im Verhältniss vergleicheist.

Vor dem Code erstmal Erklärung:

Gehen wir davon aus deine MC Punkte haben eine Gesamthöhe von 2000 Pixeln, du selbst hast aber für deine Menüpunkte auf deiner Seite nur 400 Pixel Höhe Platz.

Ergo. erstellst du eine Maske mit eben 400 Pixeln Höhe und der Breite deines Menupunktmcs und maskierst damit selbigen.
Was maskieren ist weißt du sicher von PS usw. D.h. du siehst jetzt deine Menüpunkte nur innerhlab der Maske.

Um den kompletten Menubaum anzusehen muss dieser also Scrollbar sein. Und zwar genau um die Differenz (in dem Fall 1600 Pixel)

Sprich Menubaum Y ohne Scrollen = 0 bzw. Maske._y
Menubaum Y voll gescrollt =0-Differenz bzw. m,aske._y-Differenz

Diese Differenz muss erstmal in Prozent umgewandelt werden.

Also kein scrollen 0 %. Voll gescrollt 100%

Auch die Mausposition muss in Prozent umgerechnet werden.

Du kannst also entweder die Maske selbst als Mausprozentrechner verwenden

100/maske Höhe*(Maus Y Position - maske Y)

(was aber zum Nachteil hat dass du 0 Prozent nur erreichst wenn du mit der Maus direkt an der oberen Maskenkante klebst, genauso auch mit 100 % untere Kante)

oder du nimmst eine elegantere Lösung und verwendest dazu die dritte Fläche die zB nur 300 Pixel hoch ist, dafür 50 Pixel weiter unten als die Maske liegt (also Die vertikale Mitte der Maske)

100/Fläche Höhe*(Maus Y Position - Fläche Y)

Da du somit einen prozentwert erhalten hast kannst du nun via

meinemenupunkte._y=flaeche._y-(differenz/100*mausprozente);

dein Menu scrollen lassen.

Folgender einfacher Code müsste Funktionieren und dir das ganze näher bringen.
setMask ist auskommentiert damit du den Scrollvorgang bei dieser einfarbigen Fläche auch siehst.

PHP:
//Erstmal die drei Flächen erstellen. Kannst und wirst du wahrscheinlich manuell machen

//Fläche die das Menue darstellt
createEmptyMovieClip("menu",0);
menu.beginFill(0xFF0000,100);
menu.moveTo(0,0);
menu.lineTo(300,0);
menu.lineTo(300,2000);
menu.lineTo(0,2000);
menu.lineTo(0,0);
menu.EndFill();

//Fläche die die Maske darstellt
createEmptyMovieClip("maske",1);
maske.beginFill(0x00FF00,100);
maske.moveTo(0,0);
maske.lineTo(300,0);
maske.lineTo(300,400);
maske.lineTo(0,400);
maske.lineTo(0,0);
maske.EndFill();

//Fläche die die Mausfläche darstellt
createEmptyMovieClip("maus",2);
maus.beginFill(0x000000,100);
maus.moveTo(0,0);
maus.lineTo(300,0);
maus.lineTo(300,300);
maus.lineTo(0,300);
maus.lineTo(0,0);
maus.EndFill();

//Positionieren des ganzen
maske._x=(Stage.width/2)-(maske._width/2);
maske._y=(Stage.height/2)-(maske._height/2);
menu._y=maske._y;
menu._x=maske._x;
maus._x=maske._x;
maus._y=maske._y+50;

//Maskierung (Auskommentiert)
//menu.setMask(maske);

//Errechnen der Differenz

div = menu._height-maske._height;

//Mousmove errechnet die Mauprozente

_root.onMouseMove=function(){
prz=Math.round(100/maus._height*(_root._ymouse-maus._y));

//Checken das prz nicht unter 0 und nicht über 100 geht
if(prz<0){prz=0;}
if(prz>100){prz=100;}

menu._y=maske._y-(div/100*prz);

}
Das ganze lässt sich noch verfeinern mit mx.transitions usw.
Aber ich denke damit kannst arbeiten



Sorry übrigens dass es so lange gedauert hat. Ich hab gar nicht mehr an den Thread gedacht. UPS

Wenn du es selber nicht mehr brauchen kannst, ist es vieleicht jemand anderem hilfreich ;)
 
Oben