PDA

Просмотр полной версии : Помогите сделать первый шаг


orcpochta
04.04.2010, 12:25
Не знаю как начать - расскажите возможные пути решения задачи если не сложно.

У меня есть swf, в основном классе которого есть публичные методы, которые меняют состояние содержимого этого swf. Как во флексе загрузить (на этапе выполнения) эту swf на сцену и прикрутить к ней кнопки для выполнения публичных методов?

Если объяснять лень, может ссылку дадите что почитать? Только, пожалуйста, не отправляйте читать книги - времени сейчас нет дотошно изучать флекс обо всем с нуля.

Я пробовал несколькими методами:
1) <mx:SWFLoader source="file.swf"/>
загружает, но я не знаю, что с ней дальше делать - как навесить прелоадер на ее загрузку, как потом к ней обращаться, чтобы прикрутить кнопки
2) пробовал по-Муковски через статический метод класса - точки входа, но там сразу возникает проблема, что не могу добавить на сцену после загрузки, ругается на то, что не получается конвертировать в компонент.

Ну или если всех заломает объяснять что да как делается, посоветуйте хотя бы маст рид литературу по флексу для первого шага.

ShockWave512
04.04.2010, 13:27
если лень читать доки - учи гугл, всего через форум не переспрашиваешь
Первый способ.
var loader:SWFLoader = new SWFLoader();
loader.addEventListener(Event.INIT, swfLoaded);
loader.load("AnotherSWF.swf");
//And here is the code to handle adding the new swf content application:
private function swfLoaded(event:Event):void {
var content:DisplayObject = loader.content;
// Or if you don't have the loader:
// content = event.target.content;
// add loaded SWF to a UIComponent to show it on the screen
uicomponent.addChild(content);
var sysmgr:SystemManager = (content as SystemManager);
// must wait for the swf application to finish loading
// otherwise the application is null
sysmgr.addEventListener(FlexEvent.APPLICATION_COMPLETE, swfAppComplete);
}
//And here is the code to call a function on the swf application:
private function swfAppComplete(event:FlexEvent):void {
var sysmgr:SystemManager = (event.currentTarget as SystemManager);
var swfApp:Application = (sysmgr.application as Application);
// call your function here, maybe add error checking
if (swfApp.hasOwnProperty("helloWorld")) {
var helloWorld:Function = (swfApp["helloWorld"] as Function);
helloWorld("hi");
}
}

второй способ:
дитё:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>
<![CDATA[
[Bindable] public var myProp:String = 'foo';

private function btnClick():void {
dispatchEvent(new Event('child'));
}
public function myFunc(color:uint):void {
setStyle('backgroundColor', color);
}
public function myFuncReturn(i:int, j:int):int {
return i + j;
}
]]>
</mx:Script>

<mx:Label text="{'myProp = ' + myProp}" />
<mx:Button label="dispatch event" click="btnClick()" />
</mx:Application>
грузчег:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" verticalGap="12">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.managers.SystemManager;

private var childApp:Application;

private function init():void {
SystemManager(loader.content).addEventListener(
FlexEvent.APPLICATION_COMPLETE, childReady);
}

private function childReady(e:FlexEvent):void {
childApp = e.target.application as Application;
childApp.addEventListener('child', childEventHandler);
}
private function childEventHandler(e:Event):void {
Alert.show('got child event');
}

private function setChildProp():void {
if (childApp.hasOwnProperty('myProp')) {
childApp['myProp'] = 'bar';
}
}
private function callChildFunc():void {
if (childApp.hasOwnProperty('myFunc') &&
childApp['myFunc'] is Function) {
childApp['myFunc'](0xFF00FF);
}
}
private function callChildFuncReturn():void {
if (childApp.hasOwnProperty('myFuncReturn') &&
childApp['myFuncReturn'] is Function) {
var val:int = childApp['myFuncReturn'](13, 4);
Alert.show('13 + 4 = ' + val);
}
}
]]>
</mx:Script>

<mx:Panel title="Child">
<mx:SWFLoader id="loader" source="test_child.swf" complete="init()" />
</mx:Panel>

<mx:Button label="set child property" click="setChildProp()" />
<mx:Button label="call child func" click="callChildFunc()" />
<mx:Button label="call child func return" click="callChildFuncReturn()" />
</mx:Application>
Флешер помни !!! (каска может спасти тебе жизнь!)
все участники должны быть писаны в АС3

orcpochta
05.04.2010, 01:03
Спасибо! Вместе с изучением адобовского тьютора стало вроде пониматься, что вы мне тут написали)))