Показать сообщение отдельно
Старый 14.02.2012, 00:12
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 6  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Работает, но странно...
Потому что битмап находится дальше чем мувиклип.
Класс:
Код AS3:
package MikroacseAS3Lib.HitTest{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.geom.Point;
	import flash.geom.Matrix;
	import flash.display.DisplayObject;
	import flash.geom.Rectangle;
 
	public class hit{
 
		public function hit() {
			//constructor
		}
 
		public static function Test(object1:DisplayObject,object2:DisplayObject):Boolean{
			var bmpd1:BitmapData; 
			var bmpd2:BitmapData;
			var bounds1:Rectangle = object1.getBounds(object1); //create Rect's
			var bounds2:Rectangle = object2.getBounds(object1);
			var mtrx1:Matrix = new Matrix(); //create Matrix's
			var mtrx2:Matrix = new Matrix();
			var isHit:Boolean;
 
            mtrx1.translate(-bounds1.left, -bounds1.top); //translate
			mtrx2.translate(-bounds2.left, -bounds2.top);
 
			bmpd1 = new BitmapData(bounds1.width, bounds1.height, true, 0); //create BitmapData's
			bmpd2 = new BitmapData(bounds2.width, bounds2.height, true, 0);
 
			bmpd1.draw(object1, mtrx1); //draw MovieClips to Bitmap's
			bmpd2.draw(object2, mtrx2);
 
			isHit=bmpd1.hitTest(new Point(), 255, bmpd2, new Point(), 255); // hit test
 
			bmpd1.dispose(); //clear Bitmaps
			bmpd2.dispose();
 
			return isHit; //return false or true
 
		}
 
 
	}
 
}
Вызов:
Код AS3:
import MikroacseAS3Lib.HitTest.*
import flash.events.MouseEvent;
import flash.filters.GlowFilter;
import flash.display.DisplayObject;
import flash.events.Event;
 
 
 
stage.addEventListener(MouseEvent.MOUSE_DOWN,down)
stage.addEventListener(MouseEvent.MOUSE_UP,up)
stage.addEventListener(Event.ENTER_FRAME,ef)
 
 
function ef(e:Event){
	falsetrue.text=String( hit.Test(mc1,mc2) )
}
 
function down(e:MouseEvent){
	try {
 
	e.target.startDrag()
	setChildIndex(e.target as DisplayObject,numChildren-1)
 
	} catch(e:Error){
 
	}
}
 
function up(e:MouseEvent){
	try {
 
	e.target.stopDrag()
 
	} catch(e:Error){
 
	}
}
Что и как:
[IMG]http://i.************/13/4f3960d8bd991.png[/IMG]
----------
[IMG]http://i.************/13/4f39607e8be91.png[/IMG]

Добавлено через 57 минут
Не могу найти выхода...
Такое ощущение, что битмап съезжает на точку регистрации черного круга.