基本的なドラッグ アンド ドロップ スクロール アルゴリズムに問題があります。これが私のアルゴリズムです:
マウスが押されたときに、ブール値のドラッグ = true を設定し、現在のマウスの x および y 位置を stored_position 変数に保存します。
マウスを離すと、ブール値のドラッグを false に設定します。
各フレームでドラッグ == 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;
}
});