PDA

Volledige versie bekijken : Main timeline vanuit ingelade swf.


xFTx
%Europe/Berlin %540 %2010, 13:58
Hey,

Ik probeer vanuit een ingelade swf de bovenliggende te besturen.
Ik dacht dat dit simpel was...

AS2 zou fijn werken:
_level0.sample.text = "";
_parent.sample.text = "";

maar AS3...
level0.sample.text = "";
parent.sample.text = "";

...geeft telkens errors.

Iemand een idee?:)

cornedor
%Europe/Berlin %541 %2010, 14:00
Je hebt beperkte controle over de as2 swf vanuit as3.

http://www.actionscript.org/forums/showthread.php3?t=140597

xFTx
%Europe/Berlin %543 %2010, 14:02
Je hebt beperkte controle over de as2 swf vanuit as3.

http://www.actionscript.org/forums/showthread.php3?t=140597

Dat weet ik, maar mijn swf's zijn beide AS3.
Ik maakte een voorbeeld over hoe ik het vroeger deed met AS2. :)

cornedor
%Europe/Berlin %554 %2010, 14:18
sorry verkeerd begrepen,

Maar zo zou je het moeten kunnen doen:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.CO MPLETE, onComplete);
loader.load(new URLRequest("url");
...
public function onComplete(e:Event)
{
...
e.target.content.textField.text = "Hello World!!!";
}

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Loader.html#content

Salvago
%Europe/Berlin %561 %2010, 14:28
Ik denk dat je het nog steeds mis op hebt.
Volgens mij bedoelt hij dat hij in zijn <main.swf> een andere <sub.swf> in wil laden. En dan vanuit de sub, een textfield aanspreken die zich in de main bevindt.
Terwijl ik van jouw code opmaak dat je vanuit de main een texfield in de sub aanspreekt.

As to hoe dan wel, kan ik je nu niet op weg helpen. Maar misschien corne wel? ;)

xFTx
%Europe/Berlin %566 %2010, 14:35
sorry verkeerd begrepen,

Maar zo zou je het moeten kunnen doen:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.CO MPLETE, onComplete);
loader.load(new URLRequest("url");
...
public function onComplete(e:Event)
{
...
e.target.content.textField.text = "Hello World!!!";
}

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Loader.html#content

Hmm... Ik zal me moeten verduidelijken.:D

Als ik mij niet vergis stuur jij "Hello World" van de hoofdswf naar de ingelade swf. Ik wil het omgekeerd. VANUIT mijn ingelade swf wil ik tekst naar mijn hoofdswf. Hopelijk versta je wat ik bedoel. :)

xFTx
%Europe/Berlin %566 %2010, 14:36
Ik denk dat je het nog steeds mis op hebt.
Volgens mij bedoelt hij dat hij in zijn <main.swf> een andere <sub.swf> in wil laden. En dan vanuit de sub, een textfield aanspreken die zich in de main bevindt.
Terwijl ik van jouw code opmaak dat je vanuit de main een texfield in de sub aanspreekt.

As to hoe dan wel, kan ik je nu niet op weg helpen. Maar misschien corne wel? ;)

Dat bedoel ik dus!:D

cornedor
%Europe/Berlin %570 %2010, 14:41
oh tuurlijk:s moet volgende keer echt iets beter lezen.
Maar misschien corne wel?
het is idd mischienMovieClip(root).sample.text

xFTx
%Europe/Berlin %386 %2010, 10:16
Misschien zie ik iets simpels over het hoofd...

Ik heb het even geupload.

jaspermuts
%Europe/Berlin %417 %2010, 11:00
Niet in de gelegenheid om je swf te downloaden, maar wat is je resultaat bij cornedors suggestie? het is idd mischien
MovieClip(root).sample.text

Evt zou ook moeten kunnen:
MovieClip(parent).sample.text
Kun je misschien posten hoe je de swf inlaad/toevoegt, en welke errors je eigenlijk krijgt?

En andere (ietwat nettere manier) is om in de subswf een (custom) event af te vuren, waarnaar de mainswf luistert, en de main swf dus de inhoudelijk functies uitvoert adhv ontvangen events.
Op die manier werkt je subswf ook zonder ingeladen te zijn, omdat hij dan geen verwijzingen naar (functies van) de mainswf bevat.

xFTx
%Europe/Berlin %750 %2010, 19:00
TypeError: Error #1010: Een term is ongedefinieerd en heeft geen eigenschappen.
at sub_fla::MainTimeline/frame1()


main.swf
import flash.events.Event;

var swfLoader:Loader = new Loader();
swfLoader.load(new URLRequest("sub.swf"));
swfLoader.contentLoaderInfo.addEventListener(Event .COMPLETE, swfLoaderCompleteHandler);
addChild(swfLoader);

function swfLoaderCompleteHandler(event:Event){
Debug.text = "Main loaded.";
}

sub.swf
MovieClip(root).Debug.text = "test";
//of
MovieClip(root).gotoAndStop(2);

Ook parent had ik al geprobeerd, er gebeurt niets.

xxx
%Europe/Berlin %673 %2010, 17:10
Je moet in je main class dan de variabele 'Debug' in de constructor definiëren.


package
{
import flash.display.Movieclip;

public class Main{
public var Debug:Textfield;

public function Main():void
{
public var Debug = new Textfield();
}
}
}

xFTx
%Europe/Berlin %856 %2010, 21:33
Ik maak geen gebruik van packages en classes...

Maar als ik het goed snap is dit enkel bedoeld voor een textfield, en niet voor andere dingen.

gotoAndPlay() werkt ook niet...

Vreselijk dat dit zo moeilijk is terwijl het in AS2 op 5 seconden gefixt was.

cornedor
%Europe/Berlin %872 %2010, 21:55
Packages en classes kun je voor bijna alles gebruiken.

xFTx
%Europe/Berlin %898 %2010, 22:33
Ik kom er niet meer uit. Ik heb de bestanden gemaakt, zou je ze even naar het script kunnen kijken en me zeggen wat ik moet aanpassen?

xFTx
%Europe/Berlin %847 %2010, 21:20
Het probleem is opgelost!

Om van de timeline van een ingelade swf naar de main timeline te gaan moet je (waarom weet ik niet) parent.parent gebruiken.

Dus:

MovieClip(parent.parent).sample.text = "";


Weetje:

Ik maakte gebruik van TLF textfields in mijn project, en kwam erop uit dat dit een probleem vormde. Je moet ze dus veranderen in classic textfields voor het bovenstaande probleem te voorkomen.

Zonder TLF:
TypeError: Error #1009: Kan geen eigenschap of methode benaderen via een verwijzing naar een object dat null is.
at main_fla::MainTimeline/frame1()

Vormt geen probleem.

Identieke code Met TLF toegevoegd:
ReferenceError: Error #1069: Kan eigenschap sample niet vinden bij main_fla.MainTimeline__Preloader__ en er is geen standaardwaarde.
at main_fla::MainTimeline/frame1()

Wel een probleem.

Mijn conclusie:
Als er een TLF textfield op je stage staat, zoekt flash enkel in Die swf naar je opgegeven textfield (sample.text).



Edit:

Misschien helpt dit. Adobe.com:

Flash Professional CS5 Update 11.0.1
06/02/2010 This Flash Professional update includes the latest AIR 2.0 support, support for creating full resolution iPad applications, bug fixes, and performance improvements in the Packager for iPhone. It also corrects issues with editing/preserving container and flow properties for linked TLF text containers, and addresses a compatibility issue with some third-party components that show blank live previews and/or cannot be dragged to the stage.