拖放阶段滚动算法问题

时间:2012-07-10 13:23:24

标签: algorithm flash actionscript drag-and-drop scroll

基本的拖放滚动算法存在一些问题。这是我的算法:

  1. 当鼠标按下时,我设置boolean dragging = true并将当前鼠标x和y位置存储在stored_position变量中。

  2. 当鼠标按下时,我设置了boolean dragging = false。

  3. 在每一帧上,我检查拖动== true,如果是,我计算dx = current_mouse.x - stored_position.x和dy = current_mouse.x - stored_position.y。然后我将当前鼠标位置存储为新的stored_position并通过此dx dy滚动我的视图(它是2D摄像机对象),因为Camera.x - = dx,Camera.y - = dy(我需要因为相机而反转一个特异性的)。

  4. 此算法的问题在于,当我拖动相机时,它开始闪烁并移动/摇动。我认为这是因为当我从左向右移动鼠标时,它会像这样跟踪dx:

    71
    -67
    69
    -68
    69
    -68
    8
    -5
    

    所以我认为这是鼠标抽搐(我的意思是当我们试图划线时鼠标会跳回来)。任何改变算法的想法,也许我想念一些东西? 以下是此问题的示例:https://dl.dropbox.com/u/78904724/as_host/buld_build_other.rar(您需要运行index.html选择级别并尝试拖动屏幕)。

    更新 这是示例完整源链接(这是随机图片,我发誓):https://dl.dropbox.com/u/78904724/as_host/scroll_test.rar 这是我使用的代码(例如我使用本机flash事件而不是使用axgl检查来混淆某人,我有两个例子,它会导致同样的问题):

            //variables with comments
            private var dragging:Boolean = false; //dragging flag
            private var current_mouse:Array; //stored mouse position array [0] - x, [1] - y
            private var d:Array; //dx dy array [0] - x, [1] - y
    
            [Embed(source = "test.jpg")] public static const _sprite:Class; //sprite graphics
            private var view_sprite:AxSprite; //some image on the stage to drag it
    
            //this is the class constructor code
                view_sprite = new AxSprite(0, 0, _sprite);
                add(view_sprite);
    
                current_mouse = new Array();
                d = new Array();
    
                Ax.stage2D.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void {                
                    current_mouse[0] = Ax.mouse.x;
                    current_mouse[1] = Ax.mouse.y;
                    dragging = true;
                });
                Ax.stage2D.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent):void {
                    dragging = false;
                });
                Ax.stage2D.addEventListener(MouseEvent.MOUSE_MOVE, function(e:MouseEvent):void {
                    if (dragging) {                                 
                        d[0] = Ax.mouse.x - current_mouse[0]; 
                        d[1] = Ax.mouse.y - current_mouse[1];                       
    
                        Ax.camera.x -= d[0];
                        Ax.camera.y -= d[1];
                        current_mouse[0] = Ax.mouse.x;
                        current_mouse[1] = Ax.mouse.y;
                    }
                });
    

1 个答案:

答案 0 :(得分:0)

我很困惑,但问题是这两个字符串(感谢axgl作者帮助我):     current_mouse [0] = Ax.mouse.x;     current_mouse [1] = Ax.mouse.y; 当我删除它们时,拖动将完美地工作。但是......我发誓我之前尝试过这种情况,没有任何事情会发生,相机刚开始移动速度更快而现在......现在......它有效! 谢谢大家帮助我。如果有人会遇到类似的问题,那么完整的工作来源是:https://dl.dropbox.com/u/78904724/as_host/scroll_test_worked.rar 这是axgl.org上的主题:http://axgl.org/forums/viewtopic.php?f=12&p=394