2009-07-28 3 views
0

Итак, у меня есть программа Flash CS3 (+ AS3), которая загружает еще одну флеш-программу (так называемый «pacman_main.swf» в этом примере). Я определил, что это довольно старый SWF, поскольку он создан во Flash 5 и AS1 (yippee!).AS3 Wrapper Доступ к переменным AS1

Я хочу, чтобы родительский SWF (a.k.a. обертка) имел возможность доступа к переменным, в частности счету, дочернего SWFG (a.k.a. "pacman_main.swf"). Это значит, что я могу представить оценку стороннему PHP/mySQL db бла-бла.

function checkScore() { 
    // Get the score and submit it 
} 

submitScore.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 
function mouseDownHandler(event:MouseEvent):void { 
    checkScore(); 
} 

var loader:Loader = new Loader(); 
loader.load(new URLRequest("pacman_main.swf")); 
addChildAt(loader, 0); 

Я знаю имя переменной, используя переменную Debug> List Variables после создания оболочки. Оценка - это переменная, указанная как «Variable _level0.instance5.instance6.score = 180» после получения 18 pac-точек в игре. Как мне получить доступ к этому в моей функции «checkScore»?

Спасибо!

ответ

1

Последние флеш-плееры имеют две виртуальные машины, упакованные в них, AVM2 для as3 и AVM1 для as2/as1. Из-за этого, когда вы загружаете swf as1/as2 во flash, он имеет тип AVM1Movie, который будет запускаться AVM1. К сожалению, AVM2 имеет мало доступа к объектам, работающим на AVM1, фактически «не допускается взаимодействие (например, методы вызова или использование параметров) между объектами AVM1Movie и объектами AVM2».

У вас есть доступ к исходному коду as1? Если вы делаете это, я предлагаю отключать события каждый раз, когда оценка изменяется, вы можете прослушивать эти события в своем классе-оболочке и не беспокоиться о непосредственном доступе к переменной счетчика.

Вы можете узнать больше о AVM1Movie here

Смежные вопросы