Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-12-2008, 15:28   #1 (permalink)
Neuer User
 
Registriert seit: Mar 2007
Beiträge: 29
Stage-Eigenschaften in externer SWF abfragen

Hallo zusammen,

entschuldigt bitte diese absolute Anfängerfrage, aber ich komme mit keinem Hilfsmittel auf die Lösung.

Ich lade eine externe SWF-Datei und platziere den Loader auf der Bühne. In der externen Datei platziere ich einige Buttons per Skript. Diese sollen sich allerdings an der Bühne ausrichten. Ich benötige dafür die Maße der Bühne des Hauptfilms.

Wir kann ich für meine Buttons auf Stage.stageWidth in der externen SWF zu greifen?
Paeddl ist offline   Mit Zitat antworten
Alt 30-12-2008, 15:48   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
flash kennt keinen unterschied, ob ein mc schon immer mc auf der bühne war, aus der bibliothek entstanden ist oder ob das teil in seinem 'früheren leben' ein swf war. also da gibt es keine extra befehle für.
die frage wäre, wann und wie fragst du die stage ab?
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (30-12-2008 um 15:50 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 30-12-2008, 15:50   #3 (permalink)
Neuer User
 
Registriert seit: Mar 2007
Beiträge: 29
Gleich im ersten Frame der externen Datei werden die Buttons platziert. Wahrscheinlich stehen die Werte dort noch nicht zur Verfügung. Wie stelle ich sicher, dass ich schon auf die Werte zugreifen darf?
Paeddl ist offline   Mit Zitat antworten
Alt 30-12-2008, 15:56   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
ein einfaches trace verrät dir, ob der wert einen wert hat oder nicht.

der loader stellt dir ereignisse zur verfügung:
klicke in der flashhilfe bei der klasse 'LoaderInfo' auf:
init
bzw.
complete

(zeitlich) ab diesen ereignissen sollte das swf auf der bühne gelandet sein und somit einen zugriff auf stage besitzen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (30-12-2008 um 16:02 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 30-12-2008, 16:21   #5 (permalink)
Neuer User
 
Registriert seit: Mar 2007
Beiträge: 29
So lade ich meine externe Datei herein:

Code:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, showProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, done);
loader.load(new URLRequest('start.swf'));

function showProgress(e:ProgressEvent):void
{
	var percent:Number = e.bytesLoaded / e.bytesTotal;
	percent_display.text = Math.ceil(percent * 100).toString() + ' %';
}

function done(e:Event):void
{
	removeChildAt(0);
	percent_display = null;
	loader.x = 0;
	loader.y = 0;
	addChild(loader);
}
Ich habe nun gedacht, dass ich in der externen Datei auf ADDED_ON_STAGE warte:

Code:
addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);

function addedToStageHandler(e:Event):void
{
	trace('Breite: ' + stage.stageWidth);
}
Nur irgendwie will das nicht so recht funktionieren und er zeigt mir gar nichts an.
Paeddl ist offline   Mit Zitat antworten
Alt 30-12-2008, 16:31   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Zitat:
Zitat von Paeddl Beitrag anzeigen
Ich habe nun gedacht...
sowas ist immer ganz schlecht ;-)

nochmals:
flashhilfe
klasse LoaderInfo
ganz unten steht ein beispielscript

private function initHandler(event:Event):void {..
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (30-12-2008 um 16:37 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 02-01-2009, 13:30   #7 (permalink)
Neuer User
 
Registriert seit: Mar 2007
Beiträge: 29
Vielen Dank für deinen Tipp, aber damit komme ich leider keinen Schritt weiter. Ich habe das LoaderInfo-Objekt über beide beschriebenen Möglichkeiten (contentLoaderInfo & LoaderInfo) versucht zu laden. Zudem habe ich es sowohl mit "init", als auch mit "complete" versucht. Zumal es in der Flashhilfe auch heißt:
Zitat:
Das Ereignis complete wird immer nach dem Ereignis init ausgelöst.
Das Complete-Event habe ich von Beginn an in Gebrauch, wie du an meinem letzten Posting erkennst.

Ich denke damit komme ich nicht weiter, denn meine Hauptdatei sieht so aus:

PHP-Code:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INITinitHandler);
loader.contentLoaderInfo.addEventListener(Event.COMPLETEcompleteHandler);
loader.load(new URLRequest('start.swf'));

function 
initHandler(e:Event):void
{
    
trace('INIT');
}

function 
completeHandler(e:Event):void
{
    
trace('COMPLETE');
    
    
loader.0;
    
loader.0;

    
addChild(loader);

Meine Externe Datei (start.swf) sieht auf das Wesentliche reduziert nun so aus:

PHP-Code:
trace('Hinzugefügt');
trace('Stage-Breite: ' stage.stageWidth); 
Die Ausgabe meiner Hauptdatei zeigt aber Folgendes (man beachte die Reihenfolge):

Zitat:
Hinzugefügt
TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.
at start_fla::MainTimeline/start_fla::frame1()
INIT
COMPLETE
Es erscheint mir etwas absurd, wenn schneller auf meine nicht vorhandene Bühneneigenschaft zugegriffen wird, als das LoaderInfo-Objekt "init" oder "complete" sagen kann.

Was mache ich falsch?

Geändert von Paeddl (02-01-2009 um 13:31 Uhr)
Paeddl ist offline   Mit Zitat antworten
Alt 02-01-2009, 20:50   #8 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 152
die stage ist im geladenen swf erst verfügbar, wenn es auf der bühne liegt.

Du müsstest in der geladenen swf einen Listener auf das ADDED_TO_STAGE Event setzen, also warten bis "stage" da ist.
grizu ist offline   Mit Zitat antworten
Alt 03-01-2009, 13:04   #9 (permalink)
Neuer User
 
Registriert seit: Mar 2007
Beiträge: 29
Endlich mal eine vernünftige Hilfestellung von jemandem - Danke!

Der Spur bin ich ja schon in meinem letzten Posting nachgegangen, obwohl es von 13k hieß, dass ich mich am LoaderInfo-Objekt langhangeln soll. Hier nun meine Lösung für das Problem:

Das Loader-Objekt im Hauptfilm lädt ganz normal die externe Datei und platziert diese nach erfolgreichem Ladevorgang. In der externen Datei wird dann auf "ADDED_TO_STAGE" gewartet:

PHP-Code:
addEventListener(Event.ADDED_TO_STAGEaddedToStageHandler);

function 
addedToStageHandler(e:Event):void
{
    
/*
        stage.stageWidth und stage.stageHeight stehen in dieser Funktion zur Verfügung
    */


Geändert von Paeddl (03-01-2009 um 13:06 Uhr)
Paeddl ist offline   Mit Zitat antworten
Alt 03-01-2009, 19:26   #10 (permalink)
Neuer User
 
Registriert seit: Nov 2006
Beiträge: 152
jo freut mich wenns funktioniert
grizu ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
bühne, extern, maße, stage, swf

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele