我希望大家對繪圖和滾動表現有所建議。要求是 - 我必須畫出音量值更新爲30 fps的圖表。我需要繪製該圖並同時滾動以適應新的值。所以圖的長度(寬度)是無限的。所以,請建議完成這一平滑表現,活動圖形每隔1/30秒更新一次
0
A
回答
1
的BitmapData有scroll()
方法,你可以使用的最好的方法 - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#scroll()
基本上每一幀,你只畫像素的價值的數據的一列(你的BitmapData將是查看你的聲音,並且每列像素是一次捕獲的數據) - 大多數情況下,你可能只會使用setPixel()
來設置音量值。
繼續前進,一幀數據的一列像素,然後當你達到你的閾值(BitmapData的右側)時,使用scroll()
將數據移動一個像素(你會丟失最左側的像素列),然後繼續在像素的最後一列(右側)繪圖。您將創建一個不斷更新的音量顯示。
最後使用lock()
和unlock()
之前和之後繪製停止更新屏幕Flash的同時。
我建議卻有着某種限制 - 即成長無限=大問題後
編輯
下面是一些代碼項目。這花了我0ms(在調試播放器上使用getTimer()
)來渲染。你最終會遇到問題,因爲卷矢量增長無限,這從來都不是好事。如果你只需要保留最後的x幀,那麼這段代碼更容易。
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.getTimer;
public class Main extends Sprite
{
private var m_bmd:BitmapData = null;
private var m_vol:Vector.<int> = null;
private var m_currVol:int = 0;
public function Main():void
{
// create our bmd
this.m_bmd = new BitmapData(400.0, 200.0, false, 0);
// add it to the stage
var b:Bitmap = new Bitmap(this.m_bmd);
this.addChild(b);
// create our volume array
this.m_vol = new Vector.<int>();
// set our current volume
this.m_currVol = this.m_bmd.height/2;
// start our volume listener
this.addEventListener(Event.ENTER_FRAME, this._onEnterFrame);
}
private function _onEnterFrame(e:Event):void
{
var start:int = getTimer();
// update our volume and add it to our array
this.m_currVol += int((Math.random() * 10.0) - 5.0); // adds a random int between -5 and 5
this.m_currVol = (this.m_currVol < 0) ? 0 : (this.m_currVol > this.m_bmd.height) ? this.m_bmd.height : this.m_currVol; // clamp it to the bitmap data height
this.m_vol[this.m_vol.length] = this.m_currVol;
// lock our bitmap
this.m_bmd.lock();
// clear the bitmap
this.m_bmd.fillRect(this.m_bmd.rect, 0);
// go through and draw our volumes (for max the size of the bmd)
var len:int = (this.m_vol.length < this.m_bmd.width) ? this.m_vol.length : this.m_bmd.width;
var startX:int = (this.m_vol.length < this.m_bmd.width) ? 0 : this.m_vol.length - this.m_bmd.width;
for (var i:int = 0; i < len; i++)
this.m_bmd.setPixel(i, this.m_vol[startX + i], 0xffff00);
// unlock our bitmap
this.m_bmd.unlock();
trace("This took " + (getTimer() - start) + "ms to render");
}
}
}
添加一個滾動條來改變startX
變量(默認情況下,它會始終顯示數據的最後量),以及你在那裏
相關問題
- 1. Gnuplot - 每秒更新圖形
- 2. ViewModel每秒更新一次?
- 3. 如何每隔X秒自動刷新一次自動刷新?
- 4. 更新HttpResponse每隔幾秒
- 5. jsf 2:如何使Primefaces線圖每隔1秒更改一次?
- 6. 每隔n秒更換一次圖像源wp7
- 7. 每隔5秒刷新一次D3生成的表格
- 8. iPhone CLLocationManager每0.5秒更新一次
- 9. Android Studio每5秒更新一次textview
- 10. 每3秒更新一次TextView值
- 11. 每N秒更新一次TextView?
- 12. Android每10秒更改一次圖片
- 13. 更新間隔小於1秒的速度每秒更新
- 14. 每隔幾分鐘更新一次QWidget
- 15. 每隔n秒複製一次
- 16. 每隔幾秒PHP調用一次pcntl_signal_dispatch()
- 17. 每隔一秒刷新一次特定的html文件
- 18. 如何在jQuery的更新每隔秒
- 19. 檢查div的餘量比每隔一秒移動一次
- 20. UITableView的問題:動作只能每隔一秒執行一次
- 21. 每10秒更新一次自我更新部件Handler.postDelayed問題
- 22. 每5秒更新一次表格數據
- 23. 如何使用JavaScript每隔X秒刷新一次瀏覽器?
- 24. 如何每隔30秒刷新一次ActionScript3代碼?
- 25. while循環中每隔n秒刷新一次異步頁面
- 26. 每隔10秒刷新一次jQuery Mobile ListView
- 27. 用mysql查詢每隔幾秒刷新一次文本框?
- 28. 如何在gnuplot中每隔幾秒自動重新繪製一個圖表?
- 29. 更新的TextView每一秒
- 30. 如何更新RecyclerView,讓每個項目每N秒出現一次?
Divilly嗨, 感謝您抽出寶貴的時間來解釋,但我需要的是一個可滾動的數據,即我不想丟失左側的數據,而是想要將其屏蔽掉,並且一旦滾動條越過指定的寬度就會看到滾動條,所以在任何點時間,人們可以滾動到左側,看到整個圖表。至少這對我來說是一個挑戰。 – mobdev999
在這種情況下,只需保留一個卷的數字矢量。從矢量的末尾繪製數據vis的(end - numItems),並使用滾動條(不連接任何東西 - 只需要該值)以確定該起點(如果需要)。 – divillysausages
命中cpu ... – mobdev999