Показать сообщение отдельно
Старый 01.02.2011, 18:29
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 6  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
Супер неоптимальность...
1. Зачем вообще создавать BitmapData, тем более столько раз? И...если доступна BitmapData в созданном 'Image', а она должна быть доступна, иначе все равно никак не обратиться к альфе пикселя, не проще ли сделать hitTest?
2. Я бы не использовал mask, а использовал hitArea - вложил картинку в Sprite, и создал бы кликабельную область, похожую на mask постом выше.
Код AS3:
package 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
 
	public class Main2 extends Sprite 
	{
		[Embed(source='../fla/sun.png')]
		private var Sun:Class;
 
		public function Main2() {
			if (stage) addedToStageListener();
			else addEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
		}
 
		private function addedToStageListener(event:Event = null):void {
 
			var s:Sprite = new Sprite();
			var sun:Bitmap = new Sun() as Bitmap;
			s.addChild(sun);
			var bmd:BitmapData = sun.bitmapData;
 
			var h:Sprite = new Sprite();
			h.graphics.beginFill(0);
			var zeroPoint:Point = new Point(0, 0);
			var p:Point = new Point();
			for (var x:int = 0; x < bmd.width; x++) {
				for (var y:int = 0; y < bmd.height; y++) {
					p.x = x;
					p.y = y;
					if (bmd.hitTest(zeroPoint, 128, p)) {
						h.graphics.drawRect(x, y, 1, 1);
					}
				}
			}
			h.graphics.endFill();
			h.visible = false;
			h.mouseEnabled = false;
			s.addChild(h);
			s.hitArea = h;
			addChild(s);
			s.buttonMode = s.useHandCursor = true;
			s.addEventListener(MouseEvent.CLICK, clickListener);
		}
 
		private function clickListener(event:MouseEvent):void {
			trace(event.localX, event.localY);
		}
 
	}
}


Последний раз редактировалось zuxul; 01.02.2011 в 18:43. Причина: накидал примерчик...