我希望大家对绘图和滚动表现有所建议。要求是 - 我必须画出音量值更新为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