2016-10-21 61 views
1

我創建了一個MOUSE_MOVE的MouseEvent和代碼,而我將鼠標光標移動到畫圈圈。問題是,如果我移動鼠標太快,它不會畫出每一個圓圈。 After I move the mouse cursor in a line with moderate speed光標移動太快代碼閱讀

這裏是我對MOUSE_MOVE事件的代碼。

stage.addEventListener(MouseEvent.MOUSE_MOVE, mCursor); 

public function mCursor(e:MouseEvent):void 
{ 

    var cursor:Shape = new Shape(); 

    cursor.graphics.beginFill(1, 1); 
    cursor.graphics.drawCircle(e.stageX, e.stageY, 10); 
    cursor.graphics.endFill(); 
    addChild(cursor); 
} 

會不會有一個算術等式或物理公式將它添加每一個圓,使得它可以畫一條直線之間沒有空白?

+0

嘗試使用像素(位圖數據),使得繪圖應用程序時,不形狀。所有這些'addChild(cursor);'可能會減慢系統,如果你添加太多內存。 –

+0

是否有使用位圖數據的教程?我不太熟悉它,因爲形狀是基本理解的 – Zulu

+0

這裏有很多教程。你目前的問題是'cursor'是一個變量。添加的每個圖形都在系統中創建多個**變量**。創建一個具有特定寬度和高度的空白位圖數據,然後使用setpixel(它只是在畫布中的特定座標處更改顏色),這種方式您不會不斷添加,但只需編輯一定數量。如果你需要特定的圓形/大小,那麼可能首先''繪製'它作爲'cursor_BMP',然後''rubberstamp''canvas_BMP'周圍的像素。 –

回答

2

只需使用

cursor.graphics.lineTo(…); 

要繪製的,而不是添加離散的單獨界點之間的連續的線。

我擦除上述代碼和剛添加的代碼cursor.graphics.lineTo(e.localX, e.localY);這一行我測試和有在

之間

必須設置行第一寬度坯料通過調用graphicslineStyle()方法目的。否則,線寬爲零(其默認值)。

這裏有一個完整的工作文檔類:

package 
{ 
    import flash.display.Sprite; 
    import flash.display.Shape; 

    import flash.events.MouseEvent; 

    public class Main extends Sprite 
    { 
     private var cursor:Shape; 

     public function Main() 
     { 
      cursor = new Shape(); 
      cursor.graphics.lineStyle(2); 
      addChild(cursor);    

      stage.addEventListener(MouseEvent.MOUSE_MOVE, mCursor); 
     } 

     private function mCursor(e:MouseEvent):void 
     { 
      cursor.graphics.lineTo(e.stageX, e.stageY); 
     }  
    } 
} 

您可能遇到以設置適當的起始位置與moveTo反覆折騰。現在的代碼是從0/0開始的。

+0

我嘗試使用此代碼,但結果仍是一樣的,我行我畫 – Zulu

+0

@Zulu你究竟是如何做到這一點得到了之間的空白嗎?隨意將您的代碼添加到您的問題。對於該行,您應該只使用一個遊標對象。 – null

+0

我擦除上述代碼和剛添加的代碼這一行 mouseClick.graphics.lineTo(e.localX,e.localY); 我測試和有在 – Zulu