Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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.

Старый 14.11.2008, 23:14
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Иииии в чем проблема?

Старый 15.11.2008, 00:30
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 3  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Проблема в том чтобы получить экземпляр Square. Ведь t выдает [object Shape] - вообще не понимаю откуда он - я ж нигде не создавал его. Предполагаю, что это как-то связано с внедрением символа (тэг Embed). t.parent дает ссылку на SDef - класс, который связан с внедренным символом. И вот как связать эти ниточки, что приведут меня к объекту Square и его методу print()?

Старый 15.11.2008, 00:35
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ну как же, Shape — это ребенок Square. Это говорит о том, что внутри Square что-то нарисовано.

Старый 15.11.2008, 00:46
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 5  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
__etc, не пойму...
Код AS3:
trace(t.parent is Square) //false

Старый 15.11.2008, 00:51
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Так в Main вы никуда свои Square и не добавляете.

Старый 15.11.2008, 00:56
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 7  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Ну как же? В Main:
Код AS3:
spriteForShapes = new Sprite();
addChild(spriteForShapes);
В Square:
Код AS3:
s = new SDef();
Main.spriteForShapes.addChild(s);
На сцене все отображается.

Старый 15.11.2008, 02:01
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А где addChild(sq); ?

Старый 15.11.2008, 13:01
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 9  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
В том и дело, что sq не является дисплей обжектом. А добаление спрайта происходит в конструкторе в статический спрайт. Но я понял, что вы хотели сказать: если Square расширяет Sprite, то без проблем можно получить то, что мне нужно было. Спасибо, получилось!

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:14.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.