Показать сообщение отдельно
Старый 14.11.2008, 23:07
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 1  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
По умолчанию Получить ссылку на класс, имея заэмбеденный из библиотеки символ

Привет. Нужна ваша помощь. Есть такая конструкция:
Код AS3:
package {
	import flash.display.Sprite;
 
	public class Main extends Sprite {
		public static var spriteForShapes:Sprite;
		public static var spriteForParticles:Sprite;
 
		public function Main():void {
			spriteForShapes = new Sprite();
			spriteForParticles = new Sprite();
 
			var sq:Square = new Square(400, 300);
			var pt:Particle = new Particle(400, 100);
 
			addChild(spriteForShapes);
			addChild(spriteForParticles);
		}
	}
}
Код AS3:
package {
	import flash.display.Sprite;
	import ru.inils.utils.Debugger;
 
	public class Square{
		private var s:Sprite;
		[Embed(source='../lib/test.swf', symbol='pict')]
		private var SDef:Class;
 
		public function Square(posX:int, posY:int):void {
			s = new SDef();
 
			s.x = posX;
			s.y = posY;
 
			Main.spriteForShapes.addChild(s);
		}
 
		public function print():void {
			Debugger.trace("Square Class");
		}
	}
}
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;
	import ru.inils.utils.Debugger;
 
	public class Particle{
		private var s:Sprite;
 
		public function Particle(posX:int, posY:int):void {
			s = new Sprite();
			s.graphics.beginFill(0x0000AA);
			s.graphics.drawCircle(0, 0, 5);
			s.graphics.endFill();
 
			s.x = posX;
			s.y = posY;
 
			Main.spriteForParticles.addChild(s);
 
			s.addEventListener(Event.ENTER_FRAME, test, false, 0, false);
		}
 
		private function test(e:Event):void {
			s.y ++;
 
			if (Main.spriteForShapes.hitTestPoint(s.x, s.y, true)) {
				var t:* = Main.spriteForShapes.getObjectsUnderPoint(new Point(s.x, s.y))[0];
				Debugger.trace(t); //[object Shape]
				Debugger.trace(t.parent); //instance1.Square_SDef0
			}
		}
	}
}
Прошу прощения за длинющий код, но тут просто - в главном классе создаются два статических спрайта, и в них добавляем Square и Particle. В Square из библиотеки эмбедим символ. Particle проверяется на пересечение с Square и в трейсе видно, что столкновение регистрируется. И вот самое главное - теперь нужно получить ссылку на экземпляр класса Square, имея [object Shape] (см. трейс), и выполнить метод print.