Показать сообщение отдельно
Старый 19.06.2014, 23:59
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 10  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Dmitriy154,
Код AS3:
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Matrix;
import flash.display.Bitmap;
import flash.geom.ColorTransform;
import flash.display.IBitmapDrawable;
import flash.display.DisplayObjectContainer;
 
var s1:Sprite = new Sprite();
var s2:Sprite = new Sprite();
this.addChild(s1);
this.addChild(s2);
s1.graphics.beginFill(0xFF0000);
s1.graphics.drawRect(0, 0, 100, 200);
s1.rotation = 60;
s1.transform.concatenatedMatrix
 
s2.graphics.beginFill(0xFF0000);
s2.graphics.drawCircle(50, 50, 50);
s2.scaleX = .5;
s2.x = 150;
s2.y = 150;
 
s1.startDrag(true);
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
 
function onEnterFrame(event:Event):void{
	s1.transform.colorTransform = new ColorTransform();
	if(test(s1, s2)){
		s1.transform.colorTransform = new ColorTransform(
			1, 1, 0, 1,
			0xFF,
			0,
			0xFF
		);
	}
}
 
function test(s1:DisplayObject, s2:DisplayObject):Boolean{
	if(!(s1.transform.matrix && s2.transform.matrix && s1.parent === s2.parent)){
		return false;
	}
	var rect1:Rectangle = s1.getBounds(this);
	var rect2:Rectangle = s2.getBounds(this);
	if(rect1.intersects(rect2)){
		var bm1:BitmapData = new BitmapData(
			rect1.width, rect1.height, true, 0x00000000
		);
		var bm2:BitmapData = new BitmapData(
			rect2.width, rect2.height, true, 0x00000000
		);
 
		var m:Matrix = null;
 
		m = s1.transform.matrix.clone();
		m.translate(-rect1.x, -rect1.y);
		bm1.draw(s1, m);
 
		m = s2.transform.matrix.clone();
		m.translate(-rect2.x, -rect2.y);
		bm2.draw(s2, m);
 
		var maxAlpha:uint = 0x01; // чувствительность к прозрачности
		return bm1.hitTest(
			rect1.topLeft, maxAlpha, bm2, rect2.topLeft, maxAlpha
		);
	}
	return false;
}