0

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

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

  2. 当鼠标向上时,我设置布尔拖动 = 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 (我需要反转一个,因为相机具体的)。

该算法的问题在于,当我拖动相机时,它开始闪烁并四处移动/摇晃。我认为这是因为当我将鼠标从左向右移动时,它会像这样跟踪 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;
                }
            });
4

1 回答 1

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

于 2012-07-12T10:14:43.680 回答