2017-10-02 1 views
1

So habe ich ein Zeichen auf einem Bildschirm, und ich möchte es an den aktuellen Mauskoordinaten sein.Erhalten Sie nur Mauskoordinaten, wenn es auf dem Bildschirm as3 ist

Das Problem, das ich habe, ist, wenn die Maus nicht auf dem Bildschirm ist der Charakter springt zu einem zufälligen Ort auf dem Bildschirm, wenn ich es in der Lage bleiben soll, wo die Maus zuletzt war, als es war auf dem Bildschirm.

Frage:
Wie mache ich es so, mein Charakter in der letzten Position bleibt die Maus in auf dem Bildschirm war?

import flash.ui.Mouse; 
import flash.display.MovieClip; 
import flash.events.*; 
stage.addEventListener (Event.ENTER_FRAME,gameloop); 
function gameloop(e:Event){ 
    Mouse.hide(); 
    Character.x = mouseX; 
    Character.y = mouseY; 
} 

Antwort

1

Sie müssen nur einige Bedingungen auf Ihre Position Zuweisungen setzen:

function gameloop(e:Event){ 
    Mouse.hide(); 
    if(mouseX > 0 && mouseX < stage.stageWidth - Character.width){ 
     Character.x = mouseX; 
    } 

    if(mouseY > 0 && mouseY < stage.stageHeight - Character.height){ 
     Character.y = mouseY; 
    } 
} 

Es Sie sagen, aktualisieren Sie nur die Zeichen x Wert, wenn der Mausposition, wenn mehr als 0 und weniger als Bühnenbreite (weniger die Zeichenbreite, die hilfreich ist, wenn Sie Punkt auf Ihrem Charakter 0,0 sind). Wenn die Bedingung nicht besteht, bleibt der Charakter an seiner vorherigen Position.

Ihr Zustand kann je nach den Grenzen, die Ihre Charaktere einhalten müssen, unterschiedlich sein.

Wenn Ihre Maus jedoch außerhalb des Bildschirms (außerhalb des Anwendungsfensters) ist, sollte sie die Maus-X/Y-Werte überhaupt nicht aktualisieren, also gibt es hier vielleicht ein anderes Problem?

+0

Ich denke, klicken und ziehen aus der Bühne wird Ihren Code in das Zeichen außerhalb des Bildschirms bewegen. – Organis

+0

Verfolgen der Mauswerte Es scheint, wenn die Maus den Bildschirm verlässt, gibt das System den Mauswerten einen Wert innerhalb des Bildschirms. – jbell

1

Also, was passiert ist, wenn die Maus den Bildschirm verließ, würde es aus irgendeinem Grund die Mauswerte in einer scheinbar zufälligen Stelle auf dem Bildschirm lesen. Die neue zufällige Position der Maus schien immer 60-70 + oder so sein Pixel entfernt von dem letzten Maus Wert so meine Lösung war:

stage.addEventListener(MouseEvent.MOUSE_MOVE,screenExit); 
function screenExit(e:MouseEvent){ 

    if((mouseX > (lastX+50))||(mouseX < (lastX-50))){ 
     lastX =mouseX; 
     lastY =mouseY; 
    } 
    else if((mouseY > (lastY+50))||(mouseY < (lastY-50))){ 
     lastX =mouseX; 
     lastY =mouseY; 
    } 
    else{ 
     Character.x = mouseX; 
     Character.y = mouseY; 
    } 
    lastX =mouseX; 
    lastY =mouseY; 

    trace(mouseX, mouseY); 
} 

, wenn die Maus bewegt wird, die Werte der Maus zu überprüfen, Wenn die Werte sich drastisch unterscheiden (50), wird angenommen, dass die Maus nicht auf dem Bildschirm ist (was der Fall ist) und die Position der Zeichen wird nicht aktualisiert, bis die Maus zum Bildschirm zurückkehrt und die Bewegung erneut verfolgen kann.

es ist auch möglich, dass jemand die Maus schneller als 50 Pixel bewegt (in diesem Fall wird es für die nächste Bewegung verzögern), aber angesichts des Spiels, das ich mache, wäre das schnell unwahrscheinlich.

Verwandte Themen