Тема: AS3 + GetVariable
Показать сообщение отдельно
Старый 10.07.2008, 01:17
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 18  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Действительно, в AS3 GetVariable не вытаскивает так просто переменные из полей классов. Причина, видимо, кроется в отсутствии рута. Впрочем, я сильно этот вопрос не пробивал. Нашел более логичный и естественный, на мой взгляд, способ.
Просто в классе (в любом, и в DocumentClass в т.ч.) делаются обычные get(set если хотите) методы. И их надо зарегить ExternalInterface.addCallback'ом, чтобы они были доступны со стороны оболочки. Модификаторы доступа, видимо, не имеют значения в этом случае. В частности, приват-метод будет все равно доступен из оболочки после регистрации его как Callback.
Код:
//AS3
package {
	import flash.display.Sprite;
	import flash.external.*;
	
	public class Main extends Sprite {
		public var testNum:Array;
		
		public function Main() {
			this.testNum=[3,2];
			ExternalInterface.addCallback("get_testNum", this.get_testNum);
		}
		private function get_testNum():Array {
			return testNum;
		}
	}
}
//C#
string var = axShockwaveFlash1.CallFunction("<invoke name=\"get_testNum\" returntype=\"xml\"><arguments></arguments></invoke>");
//var получит значение '<array><property id="0"><number>3</number></property><property id="1"><number>2</number></property></array>'
Добавлю, чтобы не изобретать велосипед качните архив примеров от адоба (~42Mb). В нем есть C#-проект с минимальным набором классов для сериализации/десериализации xml-запросов при работе оболочки с флэш-контролом.


Последний раз редактировалось alexcon314; 10.07.2008 в 09:00.