Я делаю приложение для ВК и есть проблема. Замут у меня в приложении сложный, поэтому постараюсь крайне доступно объяснить:
Моя флешка, быдем ее называть "flash.swf" загруженная в ВК, соединяется с сервером "http://myserver.com" и из одного из вложенных каталогов, допустим, "/templates/" загружает в себя еще один файл swf, допустим, "template.swf". Загружается стандартно, при помощи flash.display.Loader и URLRequest. Так вот, этот самый template.swf, при определенных обстоятельствах извещает событие (dispatchEvent), на которое подписана моя флешка flash.swf. Т.е, постараюсь короче, та флешка, что в ВК, должна обработать схваченное событие из загруженной флешки с другого сервера.
Вот код подгружаемой с сервера флешки, которая генерит событие:
Код AS3:
Код
public function dispatchFaceDetectorEvent(e:String, detector:FaceDetector):void{
if (e=="click"){
dispatchEvent(new FaceDetectorEvent(detector, FaceDetectorEvent.FACE_CLICK));
}
if (e=="rollOver"){
dispatchEvent(new FaceDetectorEvent(detector, FaceDetectorEvent.FACE_ROLL_OVER));
}
if (e=="rollOut"){
dispatchEvent(new FaceDetectorEvent(detector, FaceDetectorEvent.FACE_ROLL_OUT));
}
}
if (e=="click"){
dispatchEvent(new FaceDetectorEvent(detector, FaceDetectorEvent.FACE_CLICK));
}
if (e=="rollOver"){
dispatchEvent(new FaceDetectorEvent(detector, FaceDetectorEvent.FACE_ROLL_OVER));
}
if (e=="rollOut"){
dispatchEvent(new FaceDetectorEvent(detector, FaceDetectorEvent.FACE_ROLL_OUT));
}
}
А вот код флешки которая ее в себя грузит и подписывается на ее событие:
Код AS3:
Код
public class EditorWindow extends MovieClip{
public static var instance:EditorWindow;
var template:Loader = new Loader;
var request:URLRequest;
public function EditorWindow() {
Security.allowDomain(Settings.host); //Здесь лежит адрес сервера в виде [url=http://myserver.com]http://myserver.com[/url]
instance = this;
loadTemplate();
}
public function loadTemplate():void{
request = new URLRequest(Variables.activePreview.swfURL); //Здесь лежит адрес нужной флешки на сервере
template.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderEventHandler);
template.addEventListener(FaceDetectorEvent.FACE_CLICK, detetectorEventHandler);
template.addEventListener(FaceDetectorEvent.FACE_ROLL_OVER, detetectorEventHandler);
template.load(request);
}
private function detetectorEventHandler(e:FaceDetectorEvent):void{
if (e.type=="faceClick"){
trace("click");
}
}
private function loaderEventHandler(e:Event):void{
if (e.type=="complete"){
addChild(template);
template.x = this.width/2-template.width/2;
template.y = this.height/2-template.height/2-25;
}
}
}
public static var instance:EditorWindow;
var template:Loader = new Loader;
var request:URLRequest;
public function EditorWindow() {
Security.allowDomain(Settings.host); //Здесь лежит адрес сервера в виде [url=http://myserver.com]http://myserver.com[/url]
instance = this;
loadTemplate();
}
public function loadTemplate():void{
request = new URLRequest(Variables.activePreview.swfURL); //Здесь лежит адрес нужной флешки на сервере
template.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderEventHandler);
template.addEventListener(FaceDetectorEvent.FACE_CLICK, detetectorEventHandler);
template.addEventListener(FaceDetectorEvent.FACE_ROLL_OVER, detetectorEventHandler);
template.load(request);
}
private function detetectorEventHandler(e:FaceDetectorEvent):void{
if (e.type=="faceClick"){
trace("click");
}
}
private function loaderEventHandler(e:Event):void{
if (e.type=="complete"){
addChild(template);
template.x = this.width/2-template.width/2;
template.y = this.height/2-template.height/2-25;
}
}
}
ну а вот, на всякий случай, класс моего события:
Код AS3:
Код
public class FaceDetectorEvent extends Event{
public var detector:FaceDetector;
public static const FACE_ROLL_OVER:String = "faceRollOver";
public static const FACE_ROLL_OUT:String = "faceRollOut";
public static const FACE_CLICK:String = "faceClick";
public function FaceDetectorEvent(detector:FaceDetector, type:String){
super(type, true, false);
this.detector = detector;
}
}
public var detector:FaceDetector;
public static const FACE_ROLL_OVER:String = "faceRollOver";
public static const FACE_ROLL_OUT:String = "faceRollOut";
public static const FACE_CLICK:String = "faceClick";
public function FaceDetectorEvent(detector:FaceDetector, type:String){
super(type, true, false);
this.detector = detector;
}
}
Результат - TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать FaceDetectorEvent@2636d0a1 в FaceDetectorEvent.
Такое ощущение, что он воспринимает евент извещаемый загруженной флешкой и евент, на который я подписан как евенты разных типов. Не странно ли?
Очень нужна помощь!!!