Hier geht es im weitesten Sinne um alles, was mit Mouse, Mauszeiger, Mausposition und Registrierpunkt zu tun hat.
Weitere Links zu verwandten Themen:
Die Mausposition ermittelt man über mouseX und mouseY. Dabei wird die horizontale Mausposition zum Registrierpunkt über mouseX und die vertikale Mausposition zum Registrierpunkg über mouseY zurückgegeben.
stage.mouseX und stage.mouseY ermitteln also die Mausposition zur linken oberen Ecke der Bühne.
Hat man eine Instanz eines MCs oder anderen Displayobjektes kann man den Abstand zur Maus folgendermaßen ermitteln.
myMc.mouseX, myMc.mouseY
Die horizontale Mausposition auf der Bühne
var myVar:Number; myMc.addEventListener(Event.ENTER_FRAME, enterFrameHandler); function enterFrameHandler(event:Event):void { myVar = stage.mouseX; trace(myVar) }
Mausposition relativ zum Mittelpunkt des Movieclips
var myVar:Number; stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler); function enterFrameHandler(event:Event):void { myVar = myMc.mouseX; trace(myVar) }
Alternativ kann man mittels MouseEvent die Mausposition zum Registrierpunkt der Bühne oder zum Registrierpunkt des Objekts, auf das der MouseEvent registriert ist, aufrufen.
Die Eigenschaften sind:
localX, localY
stageX, stageY
import flash.events.MouseEvent; myMc.addEventListener(MouseEvent.CLICK, tracePos); function tracePos(evt:MouseEvent):void { trace(evt.localX);//x-Position zum Registrierpunkt myMc trace(evt.stageX);//x-Position zum Registrierpunkt der Bühne }
Man kann zwar keinen alternativen Mauszeiger aus dem System in Flash darstellen, aber man kann den Mauszeiger unsichtbar machen Mouse.hide()
und einen Sprite stattdessen nehmen.
Der Sprite oder MC muss die Eigenschaft altmaus.mouseEnabled = false
zugewiesen bekommen, denn sonst läge immer der alternative Mauszeiger unter der Maus und es wäre kein Button anklickbar.
Mouse.hide(); altMouse.mouseEnabled = false; altMouse.addEventListener(Event.ENTER_FRAME, mouseMovement); function mouseMovement(evt:Event) { altMouse.x = stage.mouseX; altMouse.y = stage.mouseY; }
Mit der Point Klasse lassen sich Punkte definieren, siehe dazu meinen Tipp Point.
Hat man Movieclips ineinander verschachtelt, kann es schon mal vorkommen, dass man die Mausposition aus dem relativen Koordinatensystems des MCs in das globale Koordinatensystem der Bühne umrechnen muss, oder umgekehrt. Hier kommen die beiden Funktionen globalToLocal() und localToGlobal() ins Spiel.
1.) globalToLocal()
bedeutet, dass globale Koordinaten, also die Koordinaten der Bühne, in das lokale Koordinatensystem des Movieclips umgerechnet werden.
2.) localToGlobal()
Lokale Koordinaten eine Movieclips werden in das globale Koordinatensystem der Hauptbühne umgerechnet.
import flash.geom.Point; import flash.events.MouseEvent; b1.addEventListener(MouseEvent.CLICK, heartToHoly); b2.addEventListener(MouseEvent.CLICK, holyToHeart); b3.addEventListener(MouseEvent.CLICK, holyToJesus); var stgP:Point; function heartToHoly(evt:MouseEvent):void { //das globale Koordinatensystem, wird in das locale Koordinatensystem gebracht stgP = new Point(holy.x,holy.y); var targetPoint:Point = jesus.globalToLocal(stgP); jesus.heart.x = targetPoint.x; jesus.heart.y = targetPoint.y; } function holyToHeart(evt:MouseEvent):void { //das locale Koordintatensystem wird in das globale gebracht var quellPunkt:Point = new Point(0,0); stgP = jesus.heart.localToGlobal(quellPunkt); holy.x = stgP.x; holy.y = stgP.y; } function holyToJesus(evt:MouseEvent):void { //das locale Koordintatensystem wird in das globale gebracht var quellPunkt:Point = new Point(0,0); stgP = jesus.localToGlobal(quellPunkt); holy.x = stgP.x; holy.y = stgP.y; }
Eine Movieclip, dessen Inhalt nicht mittig im Registrierpunkt liegt, mittig in einen anderen, (leeren) Movieclip platzieren. Siehe auch den Tipp "Programmierte Bewegung mit Richtungswechsel, nach Wandberührung"