2012-07-10 75 views
0

我有一些基本拖放滾動算法的問題。這是我的算法:拖放階段滾動算法問題

  1. 當鼠標按下我設定布爾拖動=真和存儲在stored_position可變當前鼠標x和y位置。

  2. 當鼠標向上時,我設置布爾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(由於相機,我需要反轉一個具體)。

這個算法的問題是,當我拖動相機開始閃爍並移動/搖晃。我想這是因爲當我從左邊移到我的鼠標右鍵的痕跡,它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; 
       } 
      }); 
+0

你應該嘗試修復你的問題的格式了一點,但我有一個最簡單的建議實際的問題是嘗試某種類型的閾值,如果鼠標抖動是你的問題。 – JPvdMerwe 2012-07-10 13:50:43

+0

你能發表一些代碼嗎? – 2012-07-11 12:57:24

+0

@JPvdMerwe 對不起格式化,我從Android手機發布並錯過了\ n。我也嘗試過,但沒有任何幫助。 – user1214331 2012-07-11 15:03:30

回答

0

我完全糊塗了,但問題是這兩個字符串(感謝axgl筆者對我的幫助): current_mouse [0] =斧.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