Показать сообщение отдельно
Старый 16.03.2011, 14:54
RaVeN-Nikma вне форума Посмотреть профиль Отправить личное сообщение для RaVeN-Nikma Посетить домашнюю страницу RaVeN-Nikma Найти все сообщения от RaVeN-Nikma
  № 8  
Ответить с цитированием
RaVeN-Nikma

Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
Написал на быструю руку класс, исходя из ваших слов. Либо, я что-то не так делаю, либо это не подходит, ибо с каждой новой линией скорость падает.

Устанавливаем fps 100 и смотрим
Код AS3:
package 
{
 
	import flash.display.Graphics;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.display.Sprite;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
 
	public class test extends MovieClip
	{
 
		private var bitMAP:Bitmap = new Bitmap();
		private var bitMapDATA:BitmapData;
		private var graf:Sprite = new Sprite();
		private var count:uint = 0;
		private var step:Number = 0;
		private var equityArr:Vector.<Object> = new Vector.<Object>();
 
		public function test():void {
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			loadGrafik();
		}
 
		public function loadGrafik():void
		{
 
			for (var i:int = 0; i < 10000; i++ ) {
				equityArr.push( { day:"2011.03.23", time:"13:26", money:randomRange(40, 60) } );
			}
 
			step = (300 / 10000);
 
			graf.graphics.lineStyle(2, 0x008cd2);
			bitMapDATA = new BitmapData( 300, 200 );
			addChild(bitMAP);
			this.addEventListener(Event.ENTER_FRAME, createPoint);
		}
 
		private function randomRange(max:Number, min:Number = 0):Number
		{
			 return Math.random() * (max - min) + min;
		}
 
		private function createPoint(e:Event):void
		{
			var vectorStartTime:Number = getTime();
 
			graf.graphics.lineTo( (step*count) , equityArr[count].money);
			bitMapDATA.draw( graf );
			bitMAP.bitmapData = bitMapDATA;
			count++;
 
			var vectorTime:Number = (getTime() - vectorStartTime);
			trace(vectorTime);
		}
 
		private function getTime():Number
		{
			return (new Date()).getTime();
		}
 
	}
}
Добавлено через 19 минут
Кажется понял в чем проблема. Надо изменить функцию createPoint на

Код AS3:
private function createPoint(e:Event):void
		{
			var vectorStartTime:Number = getTime();
 
			var gr:Graphics = graf.graphics;
 
			var st:Number = (step * count);
			gr.lineTo( st , equityArr[count].money);
			var rect:Rectangle = new Rectangle(st, 0, (300 - st), 200);
			bitMapDATA.draw( graf, null, null, null, rect, false );
			bitMAP.bitmapData = bitMapDATA;
 
			gr.clear();
			gr.lineStyle(2, 0x008cd2);
			gr.moveTo( st , equityArr[count].money);
 
			count++;
 
			var vectorTime:Number = (getTime() - vectorStartTime);
			trace(vectorTime);
		}