0

基本的なドラッグ アンド ドロップ スクロール アルゴリズムに問題があります。これが私のアルゴリズムです:

  1. マウスが押されたときに、ブール値のドラッグ = 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 として保存し、Camera.x -= dx, Camera.y -= dy として、この dx dy によってビュー (2D カメラ オブジェクト) をスクロールします (カメラのために反転が必要です)。明確な)。

このアルゴリズムの問​​題は、カメラをドラッグすると、カメラが点滅して動き回ったり揺れたりすることです。マウスを左から右に移動すると、次のように 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 そして、これは私が使用したコードです(例では私が使用しています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

私は完全に混乱していますが、問題はこの2つの文字列でした(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 に答える