Gibt es eine Möglichkeit, einen MovieClip mit startDrag zu haben, aber nur horizontale und vertikale (d. H. Nicht diagonale) Bewegung zu erzwingen?startDrag - stoppen diagonale Bewegung
Antwort
Hier ist meine Lösung. Es verfolgt die mouseX und mouseY beim Klick und vergleicht sie mit der letzten Position. Findet heraus, in welche Richtung sich die Maus hauptsächlich bewegt, und bewegt das Objekt dorthin. Möglicherweise möchten Sie eine zusätzliche Logik hinzufügen, um das Objekt auf die nächste 10. Einheit oder die Einheitsgröße zu fixieren, die Sie für die Verwendung in Spielen oder für die organisierte Platzierung des Objekts als Fanggitter verwenden möchten.
Update: Ich ging voran und fügte eine snapNearest Funktion hinzu, um die Bewegung zu steuern.
import flash.events.MouseEvent;
import flash.events.Event;
dragObj.addEventListener(MouseEvent.MOUSE_DOWN, dragIt);
var curX:Number = 0;
var curY:Number = 0;
var oldX:Number = 0;
var oldY:Number = 0;
var gridUnit:Number = 25;
function dragIt(e:MouseEvent):void
{
// set x,y on down
oldX = mouseX;
oldY = mouseY;
// add mouse up listener so you know when it is released
stage.addEventListener(MouseEvent.MOUSE_UP, dropIt);
stage.addEventListener(Event.ENTER_FRAME, moveIt);
trace("Start Drag")
}
function moveIt(e:Event):void
{
// figure out what the main drag direction is and move the object.
curX = mouseX;
curY = mouseY;
// figure out which is the larger number and subtract the smaller to get diff
var xDiff:Number = curX > oldX ? curX - oldX : oldX - curX;
var yDiff:Number = curY > oldY ? curY - oldY : oldY - curY;
if(xDiff > yDiff) {
dragObj.x = snapNearest(mouseX, gridUnit);
}else{
dragObj.y = snapNearest(mouseY, gridUnit);
}
oldX = mouseX;
oldY = mouseY;
}
function dropIt(e:MouseEvent):void
{
//remove mouse up event
stage.removeEventListener(MouseEvent.MOUSE_UP, dropIt);
stage.removeEventListener(Event.ENTER_FRAME, moveIt);
trace("Stop Drag")
}
// snap to grid
function snapNearest(n:Number, units:Number):Number
{
var num:Number = n/units ;
num = Math.round(num);
num *= units;
return num;
}
Sie können nur auf die eine oder die andere Achse beschränken (unter Verwendung eines Einschränkungsrechtecks). Aber eine diagonale Bewegung wäre in der von Ihnen vorgeschlagenen Methode möglich, außer Sie definieren auch andere Grenzen ... zum Beispiel ein Gitter.
ja. Es gibt ein paar Optionen.
A. Sie können wählen, die startDrag() - Funktion zu verwenden und ihren zweiten Parameter mit einem Begrenzungsrechteck für Ihr ziehbares Objekt zu versehen. etwas wie;
dragSprite.startDrag(false, new Rectangle(0, 0, 20, stage.stageHeight));
B. können Sie Ihr ziehbar Objekt gesetzt für Mausereignisse zu hören, es entsprechend den Mausbewegungen bewegt. so etwas wie:
dragSprite.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventHandler);
function mouseDownEventHandler(evt:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler);
}
function mouseMoveEventHandler(evt:MouseEvent):void
{
//only move dragSprite horizontally
//dragSprite.y = evt.stageY;
dragSprite.x = evt.stageX;
}
function mouseUpEventHandler(evt:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler);
stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler);
}
Diese Methoden beschränken die Bewegung nur auf eine Achse gleichzeitig ... Nicht Ihre Schuld, weil die Frage des OPs keinen Sinn ergibt ... noch nicht. – ocodo
ah, ich habe die Frage falsch interpretiert. – TheDarkIn1978
Sie eine Zusatztaste verwenden würde könnte zum Beispiel ein normales Verhalten sein horizontal & drücken Sie die Shift-Taste vertikal zu bewegen.
function mouseMoveEventHandler(evt:MouseEvent):void
{
if(!evt.shiftKey)
dragSprite.x = evt.stageX;
else
dragSprite.y = evt.stageY;
}
- 1. Kollisionserkennung für diagonale Bewegung
- 2. Stoppen der Bewegung von SCNPhysicsBody
- 3. Gibt es eine Möglichkeit, die Bewegung des Formulars zu stoppen?
- 4. Wie kann ich die Bewegung der Knoten in Neo4j stoppen?
- 5. Stoppen Sie Elemente von Bewegung bei der Verwendung von StaggeredGridLayoutManager
- 6. Arduino - Erkennung von Bewegung/Bewegung?
- 7. Einheit 2D Charakter Bewegung
- 8. Diagonale eines 3D-Arrays
- 9. Reibungslose Bewegung
- 10. Sprite Bewegung
- 11. Obere Diagonale eines 2D-Nummernfelds
- 12. Julia: Diagonale Zeiten spärliche Matrix
- 13. Jquery animieren Scroll in Diagonale
- 14. Nach OnLongPress, erste Sicht in Gridview ruft NullPointerException in StartDrag
- 15. Glatte Kamera Stop Bewegung unity3d ios
- 16. JavaScript Animation - stoppen interne Div-Bewegung bei Erreichen der äußeren div Grenze
- 17. libGDX - Wie kann man die Bewegung des Spielers an einer bestimmten Position stoppen?
- 18. Wie kann ich meinen 2D-Charakter vom Gleiten nach Bewegung stoppen
- 19. Wie erfassen wir linke Bewegung und rechte Bewegung mit cocos2d?
- 20. XmlTextReader Bewegung zu starten
- 21. unity3d spaceshooter Bewegung
- 22. Problem mit Kivy Bewegung
- 23. Spieler Bewegung auf Unity3d
- 24. Python Spiel Spieler Bewegung
- 25. Normale Bewegung mit Modell
- 26. Galaxian-like Feind Bewegung
- 27. Vim: Vorherige Bewegung wiederholen?
- 28. Android animieren Layout Bewegung
- 29. Snake Bewegung Javascript
- 30. Bewegung funktioniert nicht
Bitte erweitern Sie Ihre Frage ... wie wollen Sie jemanden zu stoppen diagonal bewegen, wenn Sie so dass sie ... horizontal und vertikal in der gleichen Zeit bewegen? Denk darüber nach. – ocodo