有沒有辦法有一個的startDrag影片剪輯,而是迫使只水平和垂直(即未對角)的運動?的startDrag - 停止對角運動
1
A
回答
4
這是我的解決方案。它在點擊時跟蹤鼠標X和鼠標Y並將其與最後位置進行比較。找出鼠標主要移動的方向,然後在那裏移動對象。您可能需要添加一些額外的邏輯,將對象鎖定到最接近的第10個單位或任何想要形成單位網格的單位大小,以用於遊戲或組織放置對象。
更新:我繼續,並添加了snapNearest功能,以幫助控制運動。
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;
}
1
只能限制在一個軸或其他(使用的約束矩形),但對角運動將在你提出的方法是不可能的,除非你還定義了一些其他的限制......例如一個網格。
4
肯定。有幾個選項。
答:您可以選擇使用startDrag()函數併爲您的可拖動對象提供邊界矩形的第二個參數。就像是;
dragSprite.startDrag(false, new Rectangle(0, 0, 20, stage.stageHeight));
B.你可以設置你拖動對象監聽鼠標事件,根據鼠標移動移動它。是這樣的:
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);
}
+0
這些方法一次只限制一個軸的移動......不是你的錯,因爲OP的問題沒有意義......但是。 – ocodo 2010-11-23 01:15:55
2
你可以使用組合鍵,例如正常行爲是水平&按下shift鍵上下移動。
function mouseMoveEventHandler(evt:MouseEvent):void
{
if(!evt.shiftKey)
dragSprite.x = evt.stageX;
else
dragSprite.y = evt.stageY;
}
相關問題
- 1. 使用transform.position方法統一停止對角線運動
- 2. 運動背景停止對Spritekit
- 3. 停止運行@selector行動
- 4. 如何停止使用Pygame對角線移動的精靈?
- 5. 我該如何停止拖動滑塊
- 6. android:NullpointerException on startDrag()動畫後
- 7. 帆布對角線運動
- 8. 停止動畫*和*阻止完整的動作運行?
- 9. 停止拖動可拖動對象
- 10. 角停止事件傳播
- 11. 停止移動UIScrollView中的對象
- 12. 停止和恢復Oculus運動
- 13. 定影if語句停止運動
- 14. cocos2d啓動/停止運行場景
- 15. 取消動畫,停止applyTransformation運行
- 16. 動畫不會停止運行
- 17. Flash AS3 - StartDrag()內的兒童影片剪輯內的StartDrag()
- 18. AlarmManager停止運行
- 19. 停止對mousleave
- 20. 使用角度在溢出-x自動停止自動滾動
- 21. 當頁面動作自動停止時,停止運行某些代碼位
- 22. 的Greasemonkey:停止運行
- 23. 停止動畫
- 24. 停止活動
- 25. 活動停止
- 26. 停止服務,停止活動
- 27. Startdrag不是函數
- 28. JQuery停止()函數不停止動畫
- 29. 更新對象時,活動停止
- 30. 在uiimagepickerviewcontroller中停止自動對焦
請擴展您的問題......您如何建議阻止某人在對角線移動時允許他們在同一時間水平和垂直移動......?想想看。 – ocodo 2010-11-23 01:17:25