2013-04-10 62 views
0

以下函數將通過設置位圖上的像素來繪製正弦波。但你如何繪製更粗的線?而不訴諸於圖形API。位圖圖形繪製,你如何在一條線上添加厚度?

function drawWave(amp:int, freq:int):void 
{ 
    for (var i:int = 0; i < stage.stageWidth; i++) 
    { 
     var ang:Number = 2 * Math.PI * freq * i/stage.stageWidth; 
     bmd.setPixel(i, yaxis - amp * Math.sin(ang), 0xff0000); 
    } 
} 

enter image description here

+1

使用graphics.lineTo等(用您選擇的寬度)將線繪製到Shape對象中。然後通過使用bitmapData.draw(形狀)複製整個圖形 – 2013-04-10 12:53:24

回答

2

試試這個 - 調整的lineWidth要求:

function drawWave(amp:int, freq:int):void 
{ 
    var lineWidth:Number = 10; 
    var shape:Shape = new Shape(); 
    var g:Graphics = shape.graphics; 
    g.lineStyle(lineWidth, 0xFF0000); 
    for (var i:int = 0; i < stage.stageWidth; i++) 
    { 
     var ang:Number = 2 * Math.PI * freq * i/stage.stageWidth; 
     var ypos:Number = yaxis - amp * Math.sin(ang); 
     if (i==0) 
      g.moveTo(i, ypos); 
     else 
      g.lineTo(i, ypos); 
    } 
    bmd.draw(shape); 
} 

繪製圖形的形狀對象,而不是一個BitmapData - 這樣你就可以走的優勢抗鋸齒提供。然後將整個事件複製到BitmapData。

上的調整線的外觀更多的選擇見docs for lineStyle(..)

編輯:

如果你堅持只使用的BitmapData,你可以試試這個:

bmd.drawRect(new Rectangle(i-WIDTH*0.5, yaxis-amp*Math.sin(ang)-HEIGHT*0.5, WIDTH, HEIGHT), 0xff0000); 

根據需要更換寬度和高度,它會繪製矩形而不是單個像素 - 給出更粗的線條,但不是很漂亮我想像

+0

感謝您對Graphics API的關注,但是我認爲我想遠離Graphics API,作爲學習練習,並且還允許我移植代碼更容易。 – davivid 2013-04-10 14:54:15

+0

編輯我的答案;) – 2013-04-10 16:05:10

0

如果你想要線條要粗一些,我會建議使用一個圓的BitmapData而不是使用setPixel,使用draw()。

當然,您需要根據圓的大小來抵消圓的繪製位置。 - width/2 and -height/2