【问题标题】:How to write the Flash actionscript to makes this mouse action?如何编写 Flash 动作脚本来进行此鼠标操作?
【发布时间】:2015-03-22 03:32:04
【问题描述】:

我有点难以描述我需要的效果。 当我按下鼠标并向上移动,然后松开,它转到下一页。当我按下鼠标并向下移动它,然后松开,它转到上一页。 这就像在智能手机中交换桌面。 我对 Flash actionscript 不太熟悉。 我有一个实现这个效果的想法,就是当我按下鼠标(MOUSE_DOWN)时,检测到鼠标的Y位置,当我松开鼠标(MOUSE_UP)时,检测到另一个Y位置。 当旧 Y > 新 Y 时,转到 prevFrame(),当新 Y > 旧 Y 时,转到 nextFrame()。 谁能帮我用 actionscript 写它?我尝试但失败了,因为我真的无法理解脚本......

【问题讨论】:

    标签: actionscript-3 flash actionscript


    【解决方案1】:

    有几种方法可以实现您正在寻找的东西,我建议您也检查一下Touch/Gesture 事件,另外,检查这个库Gestouch(非常强大且有据可查,并且有几个@987654324 @)

    为了帮助您理解如何开始理解ActionScript 和这个有问题的逻辑,我写了这个简单的例子,仅用于教育目的(不使用触摸/手势事件或适当的命名代码约定等),您可以根据您能够从我在此答案中提到的示例和相关链接中提取的内容应用您自己的逻辑和需求。

    *

    // control for Y position when mouse down
    var downY:Number = 0;
    // control for Y position when mouse up
    var upY:Number = 0;
    
    // control for X position when mouse down
    var downX:Number = 0;
    // control for X position when mouse up
    var upX:Number = 0;
    
    // vertical or horizontal control (if true, we use the Y position, if false we use the X)
    var verticalControl:Boolean = true;
    
    // adding an event listeter to detect the mouse down state (you can apply the same for your own Object (sprite with image, or whatever you have in mind)
    stage.addEventListener(MouseEvent.MOUSE_DOWN, downHandler, false, 0, true);
    
    function downHandler(event:MouseEvent):void
    {
         stage.removeEventListener(MouseEvent.MOUSE_DOWN, downHandler);
         stage.addEventListener(MouseEvent.MOUSE_UP, upHandler, false, 0, true);
    
         // collecting current Y and X position (mouse down state)
         downY = event.localY;
         downX = event.localX;
    }
    
    function upHandler(event:MouseEvent):void
    {
        stage.removeEventListener(MouseEvent.MOUSE_UP, upHandler);
        stage.addEventListener(MouseEvent.MOUSE_DOWN, downHandler, false, 0, true);
    
        // collecting current Y and X position (mouse up state)
        upY = event.localY;
        upX = event.localX;
    
        // checking if should use Y or X position
        (verticalControl) ? frameActionScope(upY, downY) : frameActionScope(upX, downX);
     }
    
     function frameActionScope(newValue:Number, oldValue:Number):void
     {
         // using your logic (When the old Y > new Y , go to prevFrame(), and when the new Y > old Y, go to nextFrame())
         (newValue >= oldValue) ? nextFrameScope() : prevFrameScope();
     }
    
     function nextFrameScope():void
     {
         trace('next frame');
     }
    
     function prevFrameScope():void
     {
         trace('previous frame');
     }
    

    希望你能帮助到你。

    【讨论】:

    • 感谢您的帮助,我将尝试理解它并应用我的逻辑。感谢您告诉我有关触摸/手势事件的信息。这是我第一次来stackoverflow,因为实在找不到懂actionscript的人来帮助我……我因为无法解决这个问题差点精神崩溃……非常非常非常感谢。
    【解决方案2】:

    在 gPeart 发布的解决方案中,除了坐标之外,您还可以添加一些代码来捕获鼠标按下/释放的时间戳。这样,您可以计算滑动的长度、方向和速度。对于非常低的速度或非常小的距离,您可以忽略滑动;让它感觉它只响应真正的滑动。

    【讨论】:

    • 正如我所说的,这只是一个简单的示例,可以实现多个控件以使其精确。非常到位!
    • 非常好的建议,如果我能成功理解actionscript,我会尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2013-02-12
    • 2010-12-24
    • 1970-01-01
    • 2019-12-15
    • 2013-06-22
    相关资源
    最近更新 更多