Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-03-2006, 04:49   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 12
Question onLoadInit verzögert

Hi!

Ich habe ein Klasse die ich als Listener für einen MovieClipLoader adde.

in der onLoadInit funktion will ich jetzt dieVariablen der Klasse verändern und nachher weiter verwenden. Das Problem ist, dass onLoadInit verzögert ist und die Variablen erst gesetzt werden nachdem ich sie abfragen will.
Code:
class bla extends Object {
var x:Number
var loader:MovieClipLoader
 function bla(container) {
   x=0
   loader = new MovieClipLoader()
   loader.addListener(this)
   loader.loadClip("http://www.irgendwas.de/bla.gif",container)
 }
 function onLoadInit(mc) {
   x=mc._height
 }
}

b=new bla(newmc)
trace(b.x)     // ergibt 0
Wie kann ich das umgehen, wenn möglich ohne setInterval!

mfg Neon

Geändert von Neon12345 (15-03-2006 um 04:51 Uhr)
Neon12345 ist offline   Mit Zitat antworten
Alt 15-03-2006, 10:15   #2 (permalink)
Flash it baby!
 
Registriert seit: Feb 2003
Beiträge: 287
Hi,

so wie ich das sehe, ist das das alte Flashproblem. Wenn Du ein externes Bild lädst, und onLoad ausgeführt wird, dann ist das Bild aber noch nicht in Deinem MC. Du kannst die Höhe also erst im nächsten Frame abfragen. Wie Du das machst, ob über ein Interval oder ein onEnterFrame bleibt Dir überlassen
Da_Judge ist offline   Mit Zitat antworten
Alt 15-03-2006, 11:59   #3 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Zitat:
Zitat von Da_Judge
Du kannst die Höhe also erst im nächsten Frame abfragen.
So 'Brunz! Das war mal in Flash 5 oder MX!

Das Problem ist, dass du das Laden initialisierst mit der Instanzierung deiner bla-Klasse. Allerdings führst du direkt danach den trace aus. Das kann ja so (in den allermeisten Fällen) nicht funktionieren! Pack das trace in die onLoadInit und auch eine Funktion, die dir das weiter Vorgehen auslöst.
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 15-03-2006, 17:51   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 12
re

Das Problem ist, ich will mehrere Instanzen von b und später irgendwann mal von allen das x haben unabhänig von der Initialisierung aber eben danach.
Neon12345 ist offline   Mit Zitat antworten
Alt 16-03-2006, 11:54   #5 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Hmmmm... stellt sich als schwierg dar... erläutere uns doch mal, was genau du vor hast...?
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 16-03-2006, 13:22   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 12
Eben das was oben steht ;D

Bisher habe ich 2 Möglichkeiten, die mir nicht gefallen:
1. Man könnte zählen wie oft b instanziert wurde und bei jedem LoadInit wieder abziehen. => Bei 0 weitermachen

2. Mit setInterval prüfen, ob onLoadInit schon ausgeführt wurde und eine queue, welche die Instanzen von b enthält durchgehen.
Neon12345 ist offline   Mit Zitat antworten
Alt 16-03-2006, 13:31   #7 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hallo!

Schieb die doch alle in ein Array. Also so ungefähr:
PHP-Code:
function onLoadInit(mc) {
   
arr.push(mc._height)
 } 
Vorher natürlich "arr" als Array festlegen.
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 16-03-2006, 14:02   #8 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
...genau und dann abfragen, ob die Länge des Arrays gleich der Anzahl gewünschter Instanzen ist!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 16-03-2006, 16:06   #9 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 12
Der Array wird aber erst gefüllt, wenn onLoadInit aufgerufen wird. Wenn ich den Array aber einfach so direkt abfrage, nachdem das Objekt erstellt wurde, kommt das aufs Selbe raus.
Neon12345 ist offline   Mit Zitat antworten
Alt 17-03-2006, 06:22   #10 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 12
Hab jetzt ne schöne Lösung:

Es gibt ein Klasse DrawQueue mit einem Array
Funktionen:
add - fügt b zum array hinzu

drawAll - verarbeitet alle höhen wenn ready == true sonst wird _doLater = drawAll gesetzt

_doLater - dummy funktion die von onLoadInit aufgerufen wird

onLoadInit - DrawQueue wird als Listener für alle "load Objekte" registriert, wird also jedesmal aufgerufen, wenn ein x initialisiert wurde. Ebenso wird hier _doLater aufgerufen, was zu beginn eine undefinierte funktion ist.

ready - prüft ob alle höhen initialisiert sind


wenn ich jetzt DrawQueue.drawAll() irgendwo aufrufe, werden alle x verarbeitet nachdem sie initialisiert wurden.

PS.: setInterval scheint den Garbage Collector irgendwie zu stören, als ich das drin hatte konnte ich den Speicher schön per Knopfdruck anfüllen(garantierte 4 mb pro klick). Mit der jetzigen Lösung wird der Speicher wieder frei.

mfg Neon

Geändert von Neon12345 (17-03-2006 um 07:01 Uhr)
Neon12345 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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 23:51 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele