将鼠标事件(拖动)转换为触摸屏事件

时间:2013-06-17 16:20:28

标签: actionscript-3

我正在尝试将鼠标事件转换为滑动事件(用于触摸屏),但经过数小时和数小时后,我无法弄清楚如何操作。

这是我的代码:

public function DraggedItem(stageRef:Stage, grabbedItem:Object){

            this.stageRef = stageRef;
            toolbar = Engine.toolbar;
            usableItems = Engine.usableItems;
            inv = Engine.inv;
            puzzle = Engine.puzzle;
            player = Engine.player;
            linesData = Engine.linesData;

            inv.draggingItem = true;
            Mouse.hide();

            itemRef = getDefinitionByName(grabbedItem.displayName.toLowerCase()+"Proper");
            draggedItem = new itemRef;
            stageRef.addChild(draggedItem);
            draggedItem.displayName = grabbedItem.displayName;
            if (grabbedItem.lookTag)
                draggedItem.lookTag = grabbedItem.lookTag;
            draggedItem.x = mouseX + x;
            draggedItem.y = mouseY + y;
            draggedItem.scaleX = itemScale;
            draggedItem.scaleY = itemScale;
            stageRef.addEventListener(MouseEvent.MOUSE_MOVE, dragItem, false, 0, true);
            stageRef.addEventListener(Event.ENTER_FRAME, itemHitTest, false, 0, true);
            draggedItem.addEventListener(MouseEvent.CLICK, itemClick, false, 0, true);

        }

        private function dragItem(e:MouseEvent):void{
            draggedItem.x = mouseX + x;
            draggedItem.y = mouseY + y;
        } 

在我的电脑上,当我点击我的库存并选择一个项目时,我可以将它拖到我想要的屏幕上(该项目变为鼠标,鼠标隐藏)。

所以我正在尝试将其转换为触摸屏。 我试图使用“event.stageX”而不是“mouseX”,但它没有用。 我试图用TransformGestureEvent替换mouseEvent,但它没有用。

当我点击库存中的物品时,物品会卡在屏幕的中间角落,我无法移动它。 (就在我用adobe Air for Android出口的时候,如果我用swf导出它工作得很好)。

你知道我怎么做吗?

以下是该问题的视频:uploaded.net/file/lkwqsgm7

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试使用闪光灯的内置手势。

Multitouch.inputMode = MultitouchInputMode.GESTURE; //you need to enable gestures

stageRef.addEventListener(TransformGestureEvent.GESTURE_SWIPE , onSwipe); 
function onSwipe (e:TransformGestureEvent):void{
    if (e.offsetX == 1) { 
        //swiped right
        draggedItem.x += someValue;
    }else{
        //swiped left
        draggedItem.x -= someValue;
    }
}

请注意,滑动事件仅适用于一般滑动,如果您实际上只是将对象从位置A拖动到位置B,这不是滑动,而是......拖动。我不清楚你究竟想要完成什么。

如果您确实想要进行多点触控,只需将MouseEvents更改为TouchEvents即可。 Mouse_Down相当于TOUCH_BEGIN,鼠标向上等同于TOUCH_END。