Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-01-2006, 18:13   #1 (permalink)
C++ Fan
 
Registriert seit: Jan 2006
Ort: Saarbrücken
Beiträge: 16
Question Preloader von Bildern UNERKLÄRBAR?

Hallo zusammen,

ich hab hier en Problem, was ich absolut nicht nachvollziehen kann und was scheinbar weder hier noch auf Google aufgetreten ist :-(

Ich lade eine handvoll .Jpg´s von meinem Webspace in meinen Clip.
Klappt auch wunderbar, ich bekomme 1A Anzeige des Ladefortschritts und wenn er fertig is springt er in den nächsten Frame, wo er mir die Bilder für ne Gallerie präparieren soll. Macht er auch wunderbar, aber jetzt kommt das Problem : Wenn ich das nochmal mache und er die Bilder nicht aus dem Netz, sondern aus dem Cache läd klappt das NICHT. Dann hab ich das gleiche Problem, wie wenn man versucht externe Bilder von der Platte zu laden und im gleichen Frame direkt auf Properties (_width, _height zB) zugreifen will. Diese Properties sind NULL, wenn er sie aus dem Cache holt. Manchmal (selten) sind bei einigen der Bilder doch welche da (was mich noch viel mehr wundert), wobei ich da ABSOLUT keine Regelmäßigkeiten finden kann.

Hier der Code dazu:

PHP-Code:

_global
.counter _global.foodObjectArray.length;
_root.Debug("Lade "+_global.counter+" Bilder");
_root.myProgressBar._visible=true;
_root.myProgressBar.mitte._xscale=0;    

this.onEnterFrame = function() {
    var 
total=0,loaded=0,percent=0;
    for(var 
=0;i<_global.counter;i++){
        
total+=this["image"+i+"_mc"].getBytesTotal();
        
loaded+=this["image"+(i)+"_mc"].getBytesLoaded();
    }
    
percent int(loaded*100/total);
    
_root.myProgressBar.mitte._xscale=percent;
    
_root.myProgressBar.proz.text="loaded : "+percent+"%";
    
_root.Debug("Already "+percent+"% of : "+(total/1024)+" kb ("+_global.counter+" pics) loaded");
    if(
percent==100){
        
_root.myProgressBar._visible=false;
        
this.nextFrame();
        
delete this.onEnterFrame;
    }
}
for(var 
=0;i<_global.counter;i++){
    
trace("lade : "+i);
    
loadMovie(_global.foodObjectArray[i].imagePaththis.createEmptyMovieClip("image"+(i)+"_mc"i));
};
stop(); 
frame 2 :
PHP-Code:
for(var =0;i<_global.counter;i++){
    var 
clip:MovieClip=this["image"+i+"_mc"];
    
_root.Debug(clip._name+" width : " +this["image"+i+"_mc"]._width);

und hier is dann alles 0....

dabei hab ich aber grad noch en prob....
wenn ich bei den geladenen Clips en onPress etc ausführen will bekomm ich ne Sandboxverletzung .....
auch ein
PHP-Code:
System.security.allowDomain 
hilft da nit, was ich gar nit verstehe, da ich auch hier im Forum MEHRFACH gelesen hab, das das klappen soll. Hier verwend ich übrigens Flash 8

Vielen Dank für Tips

Gruß
$motty
$motty ist offline   Mit Zitat antworten
Alt 26-01-2006, 18:52   #2 (permalink)
pensionist
 
Benutzerbild von troner
 
Registriert seit: Jan 2003
Ort: Thalheim b. Wels
Beiträge: 568
hallo

testest du deinen film online oder in der ide?

mfg
troner ist offline   Mit Zitat antworten
Alt 26-01-2006, 19:00   #3 (permalink)
C++ Fan
 
Registriert seit: Jan 2006
Ort: Saarbrücken
Beiträge: 16
Ich teste das in der ide. da es sich um ein GUI für nen PDA handelt, wird es nie wirklich online sein. Könnte aber mal testen, ob das Phänomen auch online auftritt, wobei das leider keine lösung wäre

das sandboxproblem kommt online nicht, das weiss ich

Geändert von $motty (26-01-2006 um 21:02 Uhr)
$motty ist offline   Mit Zitat antworten
Alt 26-01-2006, 20:38   #4 (permalink)
C++ Fan
 
Registriert seit: Jan 2006
Ort: Saarbrücken
Beiträge: 16
mit geschickteren Suchbegriffen hab ich im Forum grad nen Thread gefunden, der beschreibt, wie man das Problem umgeht.

Einfach nicht cachen

Leider keine gute Möglichkeit und keine echte Lösung, da ich froh bin, wenn der mir die Dinger cached.
$motty ist offline   Mit Zitat antworten
Alt 27-01-2006, 16:09   #5 (permalink)
C++ Fan
 
Registriert seit: Jan 2006
Ort: Saarbrücken
Beiträge: 16
Das Sandbox Problem is vom Tisch....da hatte ich nur übersehen in den Einstellungen für den Export das Ganze auf Netz zu stellen.
Die andre Frage is noch offen. Ich versteh nicht, warum das ausm Cache raus nit klappt :-(
$motty ist offline   Mit Zitat antworten
Alt 27-01-2006, 18:55   #6 (permalink)
C++ Fan
 
Registriert seit: Jan 2006
Ort: Saarbrücken
Beiträge: 16
Schade, kann mir keiner helfen oder will mir keiner helfen, weils viel zu simpel is und ich nur die Suche nicht bedienen kann ?
Das is mir echt superwichtig!
$motty ist offline   Mit Zitat antworten
Alt 28-01-2006, 22:24   #7 (permalink)
pensionist
 
Benutzerbild von troner
 
Registriert seit: Jan 2003
Ort: Thalheim b. Wels
Beiträge: 568
hallo

also das es überhaupt funktioniert hat wundert mich wirklich!
Zitat:
Manchmal (selten) sind bei einigen der Bilder doch welche da (was mich noch viel mehr wundert), wobei ich da ABSOLUT keine Regelmäßigkeiten finden kann.
kann auch net gehen und wenn du deinen code ein wenig näher betrachtest wird es dir auch aufallen warum das net...!

aber zum eigentlichen problem loadmovie und enterframe für das laden von bildern (gif jpg png) ist (meiner meinung nach) nicht mehr das neuste, darum habe ich dir ein beispiel mit deinen ausgangscode zusammengestellt!
welches auch dein problem lösen wird!

PHP-Code:
stop();
//dieser array muss durch deinen erstezt werden
var foodObjectArray:Array = new Array("http://www.w3.org/Icons/w3c_main.png""http://interhof.com/pics/refs/ekb_ref_big.jpg");
//und meine
var count:Number 0;
var 
loader:MovieClipLoader = new MovieClipLoader()
var 
loadListener:Object = new Object();
//dein ladebalken /init
_root.myProgressBar._visible=true
_root.myProgressBar.mitte._xscale=0;
//Listener erstellen
loader.addListener(loadListener);
//moviecliploader onloadinit aufruf dann sind sicher schon alle atribute vorhanden
loadListener.onLoadInit = function(target:MovieClip) {
    
trace("breite von "+target+" : "+target._width);
}
//wenn bild geladen loadNext()
loadListener.onLoadComplete = function() {
    
loadNext();
}
//anzeigen des Ladevorgangs mit der onLoadProgress Methode
loadListener.onLoadProgress = function(target:MovieClipbytesLoaded:NumberbytesTotal:Number):Void {
    var 
Prozent:Number Math.ceil(bytesLoaded/bytesTotal*100);
    
trace(Prozent+" % "+" von "+target);
    
//den code
    
_root.myProgressBar.mitte._xscale Prozent
    
_root.myProgressBar.proz.text="loaded : " Prozent "%"
}
function 
loadNext() {
    if(
count<foodObjectArray.length) {
        var 
ref:MovieClip _root.createEmptyMovieClip("imageMc"+countcount);
        
loader.loadClip(foodObjectArray[count], ref);
        
count++;
    } else {
        
trace("alle geladen sogar aus dem cache und weiter...");
        
this.nextFrame(); 
    }
}
//ladevorgang starten
loadNext(); 
mfg

PS: kann einer von den admin mir erklären warum ich mit dem mac keinen (AS) (/AS) code korrekt einfügen kann?! er escaped zb. < in sein htmlentitie?
troner ist offline   Mit Zitat antworten
Alt 29-01-2006, 00:28   #8 (permalink)
C++ Fan
 
Registriert seit: Jan 2006
Ort: Saarbrücken
Beiträge: 16
Vielen Danke für die ausführliche Antwort !
Ich glaube hier liegt aber leider ein Fehler meinerseits vor, da für mich die PreLoader Klasse nicht verfügbar ist. Ich muss leider in Flash 6 mit AS 1 programmieren, da die ganze geschichte ja auf nem PDA laufen muss. Für Tips, wie das anders geht bin ich mehr als dankbar!

Die Preloader Klasse ist ja leider erst ab Flash 7. Und das hab ich dummerweise wohl beim erstellen des Threads nit sauber geklickt (MX direkt über MX 2004 )

Der Code den ich gepostet hab läuft deswegen, weils nur en Bruchteil des ganzen Pakets is und zB das Array, das die Links zu den Bildern enthält, woanders aus ner XML Datei heraus gefüllt wird.
EDIT:
Aber natürlich ist der Codeausschnitt das komplette Paket, welches für das Laden der Bilder da is
/EDIT

Ich finds halt einfach superunlogisch, dass die Sache klappt, wenn er sie erst läd und NIT wenn er sie im Cache hat. Das Bild is runtergeladen, wird angezeigt. Er hats im Cache, es wird angezeigt, aber ich hab keine Daten...auch nit im nächsten Frame.

Was gibts da für Möglichkeiten ?
Länger warten bis durch Magie doch das komplette Bild geladen ist ? Dafür onEnterFrame so lange laufen lassen, bis alle _width != 0 sind ? (Das teste ich gleich ma)
Auch werd ich gleich ma weiter googlen auf der Suche nach ner Möglichkeit auf dem blöden PDA doch was besseres an Flash zum Laufen zu bringen als F6 + AS 1......neuere Handys können das ja sogar

Aber auch nach näherem ausführlichen betrachen meines Codes kann ich leider nicht sehen, warum das so nicht gehen kann, da wie gesagt, alle Links zu den Bildern da sind und es ja 1A klappt, wenn er sie aus dem Netz saugt. :-)

Danke & Gruß
$motty

Geändert von $motty (29-01-2006 um 00:49 Uhr)
$motty ist offline   Mit Zitat antworten
Alt 29-01-2006, 18:24   #9 (permalink)
pensionist
 
Benutzerbild von troner
 
Registriert seit: Jan 2003
Ort: Thalheim b. Wels
Beiträge: 568
hallo

probier mal so:

ungetest!
PHP-Code:
stop();
_global.foodObjectArray = new Array("1.jpg""2.jpg");
_global.counter _global.foodObjectArray.length;
_root.Debug("Lade "+_global.counter+" Bilder");
_root.myProgressBar._visible true;
_root.myProgressBar.mitte._xscale 0;

for (var 
0i<_global.counteri++) {
    
laden(i);
}

function 
laden() {
    
target this.createEmptyMovieClip("image"+i+"_mc"this.getNextHighestDepth());
    
checker this.createEmptyMovieClip("image_checker"+i+"_mc"this.getNextHighestDepth());
    
target.loadMovie(_global.foodObjectArray[i]);
    
checker.onEnterFrame = function() {
        
total target.getBytesTotal();
        
loaded target.getBytesLoaded();
        
percent int(loaded/total*100);
        
_root.myProgressBar.mitte._xscale percent;
        
_root.myProgressBar.proz.text "loaded : "+percent+"%";
        
trace("Already "+percent+"% of : "+(total/1024)+" kb ("+_global.counter+" pics) loaded");
        if (
percent == 100 && loaded 4) {
            
_root.myProgressBar._visible false;
            
this.nextFrame();
            
delete this.onEnterFrame;
            
//alles da
            
trace(target._width);
        }
    };

besser wär noch wenn du alle bilder in reihenfolge laden würdest such dazu mal nach rekursion!

mfg
troner ist offline   Mit Zitat antworten
Alt 29-01-2006, 20:32   #10 (permalink)
C++ Fan
 
Registriert seit: Jan 2006
Ort: Saarbrücken
Beiträge: 16

nach 1-2 anpassungen leider genau das gleiche Resultat wie bei meiner eigenen Version.
So langsam verzweifle ich daran
$motty ist offline   Mit Zitat antworten
Alt 29-01-2006, 23:14   #11 (permalink)
C++ Fan
 
Registriert seit: Jan 2006
Ort: Saarbrücken
Beiträge: 16
Mit dem Tut von NetTrek

MX: ext. Bilder mit Preloader einladen

hats hingehauen......das schaut sehr ähnlich aus wie dein code troner. in variante 2 allerdings is noch ne wartezeit mit drin. dann hab ich noch nen framewechsel drin und siehe da, es klappt in 99% der fälle. ohne den framewechsel allerdings keinerlei verbesserung zu meinem originalcode, bei dem der framewechsel aber nix bringt

vielen dank troner!
$motty 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 03:51 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele