我有一些基本拖放滾動算法的問題。這是我的算法:拖放階段滾動算法問題
當鼠標按下我設定布爾拖動=真和存儲在stored_position可變當前鼠標x和y位置。
當鼠標向上時,我設置布爾dragging = false。
在每一幀我檢查拖動== 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 這是我使用的代碼(例如,在我使用的,而不是使用axgl檢查不是本機的Flash事件迷惑別人,我有兩個例子,它導致同樣的問題):
//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;
}
});
你應該嘗試修復你的問題的格式了一點,但我有一個最簡單的建議實際的問題是嘗試某種類型的閾值,如果鼠標抖動是你的問題。 – JPvdMerwe 2012-07-10 13:50:43
你能發表一些代碼嗎? – 2012-07-11 12:57:24
@JPvdMerwe 對不起格式化,我從Android手機發布並錯過了\ n。我也嘗試過,但沒有任何幫助。 – user1214331 2012-07-11 15:03:30