Показать сообщение отдельно
Старый 02.04.2008, 22:53
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
1. задержки из-за того что по Event.ENTER_FRAME плодишь столько шейпов, которые плееру вообще-то нужно перерисовывать на каждом такте, что он затыкается..
2. откуда берется твердый цвет при нулевой альфе на краю градиента не могу сказать..

как вариант решения: на каждом такте enterFrame скидывать нарисованный шейп в битмап.., некотрые артефакты тоже имеют место быть, но не такие дикие..
и хотя бы производительность не страдает
Код:
package {
	
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*

	
	public class Landscape extends Sprite {
		public var isMouseDown:Boolean;
		private var matrix:Matrix;
		private var drawShape:Shape;
		private var drawCanvas:Graphics;
		private var resultBitmap:Bitmap;
		
		public function Landscape(){
			isMouseDown = false;
			matrix = new Matrix();
			
			resultBitmap = new Bitmap(new BitmapData(stage.stageWidth, stage.stageHeight, true, 0));
			resultBitmap.smoothing = true;
			addChild(resultBitmap);
			
			drawShape = new Shape();
			drawCanvas = drawShape.graphics;
			addChild(drawShape);
			
			configureListeners();
		}
		
		public function configureListeners():void{
			stage.addEventListener(MouseEvent.MOUSE_DOWN, mousePress, false, 0, true);
			stage.addEventListener(MouseEvent.MOUSE_UP, mouseRelease, false, 0, true);
			stage.addEventListener(Event.ENTER_FRAME, update, false, 0, true);
		}

		public function mousePress(e:MouseEvent):void {
			isMouseDown = true;
		}
		
		public function mouseRelease(e:MouseEvent):void{
			isMouseDown = false;
		}
		
		public function update(e:Event=null):void{
			if(isMouseDown){ 
  				matrix.createGradientBox(100, 100, 0, mouseX - 50, mouseY - 50);
  				drawCanvas.beginGradientFill(GradientType.RADIAL, [0x150D04, 0x150D04], [0.1, 0], [0x00, 0xFF], matrix,SpreadMethod.PAD);  
  				drawCanvas.drawCircle(mouseX,mouseY,50);
				//дорисовываем шейп к битпаму, а сам шейп очищаем
				resultBitmap.bitmapData.draw(drawShape);
				drawCanvas.clear();
				
			}
		}
		
	}
	
}