gotoAndStop() und getURL(Javascript) funktionieren nicht [Flash 8]

Hi,

da sich alle Objekte Deines Films in Frame 2 befinden, könnte es möglich sein, dass noch nicht alles geladen ist, wenn Du per Script versuchst, zum zweiten Frame zu springen. Ein Preloader, der die XML-Datei nur lädt, wenn der Flashfilm komplett geladen ist, könnte Abhilfe schaffen (oder Du setzt alles in den ersten Frame, schaltest es zuerst per ._visible unsichtbar und lässt es anzeigen, wenn die XML-Datei geladen wurde - Frames auf der Hauptzeitleiste sind eigentlich sowieso in den meisten Fällen überflüssig).

Gruß
.
 
Servus...

Klingt alles wahnsinnig richtig, was du mir da erzählst, aber ich glaube kaum, dass ich nen preloader für ne XML erstellen kann und eine Funktion, die Objekcte sichtbar macht, bekomme ich auch nicht hin.

Was ist denn, wenn ich einen preloader für die ganzen objecte vor die Schleife für die XML setze. Also, erst wenn alle Obkecte eingelesen sind, wird die XML eingelesen und dann erst weitergeleitet? Kann das nicht auch helfen?

Gruß

Michael
 
Hi,

ich meinte auch keinen Preloader für die XML-Datei (obwohl das auch nicht besonders kompliziert wäre ;)), sondern für den Flashfilm. Etwas in der Art:
Code:
stop();

this.onEnterFrame = function() {
  var c = this.getBytesLoaded();
  var m = this.getBytesTotal();
  if (c > 10 && m > 10) {
    var p = c * 100 / m;
    // hier ggf. einen Ladebalken o.ä. wachsen lassen. Die Variable
    // "p" enthält den Prozentwert der geladenen Bytes des Flashfilms.
    if (p >= 100) {
      delete this.onEnterFrame;
      // Hier die XML-Datei laden!
      gotoAndStop(2);
    }
  }
}

Dafür kannst Du die Elemente auch in Frame 2 belassen.

Generell kannst Du Objekte über ihre _visible-Eigenschaft ein- und ausblenden:
Code:
meinMC._visible = false;

// wieder einblenden:
meinMC._visible = true;

Gruß
.
 
Hola...

Juhu, es klappt... fast alles :(

Nun klappt das mit der Weiterleitung wunderbest, aber nun spielt er beim erstan mal keine Sounds mehr ab. Nun weiß ich, dass es an mir liegen wird. Ich bin mal in freien Stücken davon ausgegangen, dass man Funktionen verschachteln kann, weshalb sich mein SourceCode nun folgendermaßen ließt:

Code:
this.onEnterFrame = function() {
  var c = this.getBytesLoaded();
  var m = this.getBytesTotal();
  if (c > 10 && m > 10) {
    var p = c * 100 / m;
    playdis.text=p;
    if (p >= 100) {
      delete this.onEnterFrame;
		    myLoader.onLoad = function(success) {
			anzLadeversuche++;
				if(success) {
				for(itm in myLoader.firstChild.attributes) {
					_global[itm] = myLoader.firstChild.attributes[itm];
				}
				for(var i:Number=0; i<myLoader.firstChild.childNodes.length; i++) {
					info[i] = myLoader.firstChild.childNodes[i].attributes.ghost;
				}
				} else {
				if(anzLadeversuche<maxLadeversuche) {
					myLoader.load(mySource);
				} else {
					playdis.text='error...'
				}
			}
		}
      gotoAndStop(2);
    }
  }
}

Ich habe hier schon schwere Nöte und mehr und mehr dank ich dir, dass du mir hilft. Hab auch schon hier und da geöscht, umgestellt und alles ausprobiert. Leider will sich mir das Programm nicht als funktionierend erweisen :-(
Zumal, im Testmodus läuft der einwandfrei.Kann es sein, dass ich die mp3 streamen muss, also vorladen.
Ich habe auch mal deine Anmerkung zu Herzen genommen und lass die geladene Menge in % ausgeben. Magst du mir einmal verraten, warum ich die Zahl erst ab knapp 28 sehen kann und warum die so lang ist? Gibt es vielleicht eine Möglichkeit, die ohne Kommastelle auszugeben?

Gruß

Michael
 
Zuletzt bearbeitet:
Hi,

1. Funktionen lassen sich zwar - mit Einschränkungen - verschachteln, übersichtlicher und weniger fehleranfällig wird es allerdings, wenn Du Schachtelungen vermeidest.

2. In dem gezeigten Code ist nichts über die Soundsteuerung zu sehen. Bitte poste noch einmal Deine aktuelle Datei. Wenn mp3-Dateien gestreamt werden, kann es einige Sekunden dauern, bis die Wiedergabe beginnt.

3. Ein "interner" Preloader - also einer, der sich innerhalb der vorzuladenden Datei befindet - kann erst mit seiner Arbeit beginnen, wenn zumindest die Frames, auf denen sich der Preloader befindet, geladen sind. Scheinbar setzen sich diese 28% aus den Objekten im ersten Frame zusammen (z.B. Dein Ladebalken). Für interne Preloader sollte man sich auf simple Vektorobjekte beschränken und alle weiteren Clips in späteren Frames unterbringen. Zudem: Instanzierst Du Clips per attachMovie, hast sie also zum Export für AS freigegeben, werden sie in der Regel ins erste Schlüsselbild exportiert und liegen damit quasi "vor" dem Preloader. Das kannst Du umgehen, indem Du das Häkchen bei "ins erste Bild exportieren" entfernst, und die betreffenden Objekte auf einen "Zwischenframe" setzt, der sich zwischen dem Preloader und dem eigentlichen Inhalt befindet und vom Preloader übersprungen wird.

4. Zahlen lassen sich mit den Methoden der Math-Klasse runden, z.B. mit Math.round.

Gruß
.
 
Mahlzeit

1. Muss man wissen und werd mich dran halten. Frage aber: Wie kann man das denn im meinem Beispiel umgehen? wenn ich da einfach die Funltion an der Stelle aufrufe, an der im Moment die ganze Funktion steht?

2. Ist geschehen und hier der Link.

3. Ich werde mich mal bemühen.

4. Danke, werd ich gleich mal ausprobieren.

Kann man eventuell die MP3 mit in den Preloader integrieren, also, dass man nicht mehr warten muss, dass sie beim ersten aufruf gestreamt werden? Würde ja auch abhilfe schaffen.

Gruß

Michael
 
Zuletzt bearbeitet:
Hello, noch einmal...

Nach vielen Versuchen ist es mir immer noch nicht gelungen, dass der Player beim ersten laden die mp3s abspielt. Gibt es vll eine Möglichkeit, die Tracks in den Preloader mit zu integrieren oder sind die da schon mit drin, wenn die xml eingelesen wird?

Tut mir wirklich leid, aber ich finde alleine keine Lösung und bin auf Hilfe angewiesen.

Gibt es vielleicht eine andere möglichkeit zu kontrollieren, ob die mp3 vorhanden sind?

p.s.: Sorry, wenn mein letzter Beitrag ein wenig undankbar erscheint oder ich mich falsch ausgedrückt habe. Bin noch extrem grün hinter den Ohren, was Flash und Foren angeht...

Danke im voraus...

Michael
 
Hi,

prinzipiell kannst Du von einem Preloader auch mehrere Dateien (z.B. die ersten abzuspielende mp3-Datei) vorladen lassen (Suchbegriff hier: "Multiloader").

Da ich nicht weiß, ob Dein Upload vom 14.01 noch aktuell ist, würde ich Dich bitten, die betreffenden Dateien (inklusive XML und mp3) noch einmal zu posten/hochzuladen.

Gruß
.
 
Hello...

Die Datein sind noch fast aktuell, habe sie aber denoch einmal neu hochgeladen. Wegen der MP3s sind es nun leider knapp 2,8 mb geworden. Hoffe, dass stört dich nicht.

http://www.rainer-bekannter.de/drum.rar.

Leider tritt der Fehler nicht auf, wenn man es selber unter Flash veröffentlicht, sondern nur direkt im Browser, dann aber bei allen, also Firefox, IE, Opera und Netscape.

Zu dem Multiloader: Meinst du etwas in dieser Art? Das ist das, was ich nun, nach umschreiben als Multiloader gefunden habe, neben etlichen Scripts, die viel zu aufwändig sind, fpr die 4 mp3s die ich laden will und für mein Können.

Code:
var mp3 = new Array("Song(0)","Song(1)","Song(2)","Song(3)");

this.onEnterFrame = function() {
	loader.preload(mp3);
	delete this.onEnterFrame;
}

Eine zweite Sache ist mir eben aufgefallen: Die XML wird eingelesen, wie es vorgesehen ist. Wenn aber die XML nicht gefunden wird, also der onLoad nicht success ist, dann wird nicht error im textfeld ausgegeben, obwohl es in der Schleife so festgelegt ist. Mag es sein, dass ich einen kleinen Fehler in der Schleife habe, die all diese Probleme verursacht?

Freundliche Grüße

Michael
 
Zuletzt bearbeitet:
Hi,

Dein Hauptfehler wird gewesen sein, dass Du den onLoad-Handler für die XML-Datei unsinnigerweise in eine onEnterFrame-Methode schachtelst.

Wie auch immer: im Anhang findest Du eine Version, die ein wenig anders arbeitet:
  • zunächst wird die xml-Datei geladen

  • bei onLoad wird das Array "info" gefüllt, aber nicht direkt mit den Pfaden zu den Songs, sondern mit Objekten, die wiederum aus einzelnen Songobjekten bestehen. So kannst Du die Songs vorladen und immer wieder abspielen, ohne die Datei neu vom Server anzufordern.

  • Alle Songs werden nun geladen und zusammen mit dem Hauptfilm durch die Funktion "loadAll" überwacht. Sobald alle Dateien komplett vorgeladen sind, wird in Frame 2 gewechselt.

  • Dort habe ich lediglich die Funktionen zum Abspielen und Stoppen des Songs geändert, da nicht mehr jedes Mal eine Datei in ein Soundobjekt geladen wird, sondern nur das jeweilige Soundobjekt aus dem Array "info" abgespielt werden muss.


Ist eine XML-Datei übrigens nicht vorhanden, so nimmt das Flag in den Parametern des onLoad-Handlers (success) dennoch den Wert true ein - Du kannst aber über XML.status abfragen, ob eine gültige Datei geladen wurde.

Gruß
.
 

Anhänge

  • drum_2.zip
    92,2 KB · Aufrufe: 14

Neue Beiträge

Zurück