Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-01-2004, 09:53   #1 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
denkfehler? --> OOP preloader

zuerst der quellcode:

ActionScript:
  1. function preload (xanf, yanf, bildurl) {
  2.     //variableninitalisierung
  3. var startx = xanf ;//x-anfansgskoordinaten des balkens
  4. var starty = yanf ;//y-anfangskoordinaten des balkens
  5. var breite = 151;//breite des balkens
  6. var hoehe = 4;//hoehe des balkens
  7. var farbe = 0xffd60c;//farbe des balkens
  8. var alpha = 100;// alphawert  des balkens
  9. //var at = getTimer()
  10. //zeichnen des balkens
  11. this.createEmptyMovieClip("balken_mc",1);//erstellt ein mc
  12.         balken_mc._x = startx; 
  13.         balken_mc._y = starty;
  14.         with(balken_mc){
  15.             beginFill(farbe,alpha);
  16.             lineTo(0,hoehe);
  17.             lineTo(breite,hoehe);
  18.             lineTo(breite,0);   
  19.             lineTo(0,0);
  20.             endFill();
  21.             };
  22.  
  23. this.onEnterFrame = function(){  
  24.     var t = bildurl.getBytesTotal();
  25.     var g = bildurl.getBytesLoaded();
  26.     //var st = getTimer();
  27.     //var rt = Math.round((st-at)/1000);
  28.     //var et = Math.round((t*rt)/g);
  29.     //var ct = Math.round(-(rt-et));
  30.     if(g == t){
  31.         //was er amchen soll wenn es fertig geladen ist
  32.         balken_mc.clear();
  33.         delete this.onEnterFrame;
  34.             } else {var p = (g/t)*100;
  35.                 balken_mc._xscale = p;
  36.             }
  37. }   
  38. }
  39.  
  40.  
  41.  
  42. function preloadaufruf(i) {
  43.     //for (var i = 1; i <= 4; i++) {
  44.     //var mc = this["thumb"+i];
  45.     var xanf = this._x;
  46.     var yanf = this._y;
  47.     trace("mx_x: " + xanf );
  48.     bildurl = "stuff/" + _global.kundennummer + "/" + _global.kategorie + "_" + i + ".jpg";
  49.     preload (xanf,yanf,bildurl);
  50.     }

auf dem jeweiligen mc hab ich dann preloadaufruf(1); (oder 2,3,4 etc) liegen.

kann es an den this liegen in der function preload? muss ich den container mit den reingeladen bildern ansprechen oder das bild an sich?
__________________
x 600.6
y 123.3
dante ist offline   Mit Zitat antworten
Alt 07-01-2004, 10:29   #2 (permalink)
... was sonst?
 
Benutzerbild von xele.de
 
Registriert seit: May 2002
Ort: Eifel
Beiträge: 55
Hi.

Hab vor n paar Tagen auf die Schnelle mal was ähnliches gebaut. Ist aber nur spärlich kommentiert und sicher noch verbesserungsfähig

Vielleicht kannst du das ein oder andere davon brauchen.

ActionScript:
  1. MovieClip.prototype.ladeBild = function(quelle)
  2. {
  3.     //Kontainer erstellen
  4.     this.createEmptyMovieClip("container",1);
  5.     this.container._x = 0;
  6.     this.container._y = 0;
  7.     //unsichtbar machen
  8.     this.container._alpha = 0;
  9.    
  10.     //Rahmen vom Ladebalken erstellen
  11.     this.createEmptyMovieClip("rahmen",3);
  12.     with(this.rahmen)
  13.     {
  14.         lineStyle(0.1,"0xE0DCDC",100);
  15.         moveTo(5,5);
  16.         lineTo(73,5);
  17.         lineTo(73,11);
  18.         lineTo(5,11);
  19.         lineTo(5,5);
  20.     }
  21.    
  22.     //Ladebalken erstellen
  23.     this.createEmptyMovieClip("ladebalken",2);
  24.     with(this.ladebalken)
  25.     {
  26.         lineStyle(0.1,"0xE0DCDC",100);
  27.         beginFill("0xE0DCDC",100);
  28.         moveTo(0,0);
  29.         lineTo(68,0);
  30.         lineTo(68,6);
  31.         lineTo(0,6);
  32.         lineTo(0,0);
  33.         endFill();
  34.     }
  35.     this.ladebalken._x = 5;
  36.     this.ladebalken._y = 5;
  37.     this.ladebalken._width = 0;
  38.    
  39.     this.container.loadMovie(quelle);
  40.    
  41.     this.ladebalken.onEnterFrame = function()
  42.     {
  43.         this.geladen = this._parent.container.getBytesLoaded();
  44.         this.gesamt = this._parent.container.getBytesTotal();
  45.        
  46.         this.prozent = Math.ceil((this.geladen/this.gesamt)*68);
  47.  
  48.         this.diff = this.prozent - this._width;
  49.         this._width += this.diff/5;
  50.        
  51.         //wenn geladen, Rahmen und Balken ausblenden
  52.         if(this._width >67)
  53.         {
  54.             this._parent.rahmen._alpha = this._parent._rahmen._alpha - 5;
  55.             this._alpha = this._alpha - 5;
  56.                
  57.             if(this._alpha <= 0)
  58.             {
  59.                 //Dann Bild einblenden
  60.                 this._parent.container._alpha = this._parent.container._alpha + 5;
  61.                 if(this._parent.container._alpha >= 100)
  62.                 {
  63.                     delete this.onEnterFrame;
  64.                 }
  65.             }
  66.         }
  67.     }
  68. }
  69.  
  70. //Aufruf:
  71. box.ladeBild("bild.jpg");

EDIT: Prozent ist bei mir nicht wirklich Prozent, das *68 ist nur, weil der Ladebalken 68 Pix breit ist. Und das "box" im Aufruf ist auch Variabel ..
__________________
Am 8. Tag erschuf Gott das Bier, seitdem hat man nie wieder von ihm gehört ..

-> www.xele.de

Geändert von xele.de (07-01-2004 um 10:39 Uhr)
xele.de ist offline   Mit Zitat antworten
Alt 07-01-2004, 10:36   #3 (permalink)
jungflasher
 
Benutzerbild von sesamstrassenbe
 
Registriert seit: Oct 2002
Ort: Dortmund
Beiträge: 132
hi!

ich geh mal davon aus, dass der preloader einfach nicht preloaden will?

vielleicht liegt das daran, dass du nur if (g == t) abfragst.
mach da mal ein if ( (g == t) && (g > 4) ) draus um abzufragen,
ob überhaupt schon was geladen wurde... das wirkt manchmal wunder.

gruß! daniel
__________________
sesamstrassenbert. so viel platz muss sein ;-)

www.digisurf.de
sesamstrassenbe ist offline   Mit Zitat antworten
Alt 07-01-2004, 12:53   #4 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
@daniel:

hi!
ne leider ist es nicht so einfach =)
ich glaube mein fehler leigt darin dass ich ja das bild auf dem server vorladen will und das nicht geht. ich muss höchst wahrscheinlich den container in dem ich das bild reinlade vorladen
probier ich gleich mal aus

naja ich arbeite jetzt schon länger mit flash, mit actionscript beschäftige ich mich aber erst seit ungefähr zwei moanten und manche sachen habe ich einfach "noch nicht drauf". aber das wird schon, denke ich =) .

mir ist das ganze preload prozedere noch nicht so klar.

@xele.de:

danke dass du dein script mal gepostet hast durch dich bin ich drauf gekommen dass ich den container vorladen sollte. danke
__________________
x 600.6
y 123.3
dante ist offline   Mit Zitat antworten
Alt 07-01-2004, 13:10   #5 (permalink)
jungflasher
 
Benutzerbild von sesamstrassenbe
 
Registriert seit: Oct 2002
Ort: Dortmund
Beiträge: 132
hm... also, wenn du nach dem "with {(...)}" ein "this.loadMovie(bildurl);"
einfügst und in der onEnterFrame-funktion "bildurl" durch "this" ersetzt, könnte es klappen...

zur zeit lädst du ja an keiner stelle dein bild irgendwo rein.

gruß! daniel
__________________
sesamstrassenbert. so viel platz muss sein ;-)

www.digisurf.de
sesamstrassenbe ist offline   Mit Zitat antworten
Alt 07-01-2004, 13:38   #6 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
das bild rein laden in die mc's tu ich hier machen

ActionScript:
  1. function thumbladen () {
  2. //schleife zum thumbnail reinladen
  3. for (var i = 1; i <= 4; i++) {
  4.     var mc =this["thumb"+i];
  5.     //var xanf = mc._x;
  6.     //var yanf = mc._y;
  7.     //trace("mx_x: " + xanf );
  8.     bildurl = "stuff/" + _global.kundennummer + "/" + _global.kategorie + "_" + i + ".jpg";
  9.     mc.createEmptyMovieClip("leer_mc",1);
  10.     mc.leer_mc.loadMovie(bildurl);
  11.     this["geladen"+x] = true;
  12.     mc.leer_mc._xscale = 22;
  13.     mc.leer_mc._yscale = 22;
  14.     //trace(mc);
  15.     }
  16. }


ich glaueb es könnte auch was mit der ubnterschiedlichen ausführzeiten beim eintritt in einen frame liegen. deswegen hab ich nmir ne hilfsvariable gebastelt. nur irgendwie mag er das enterframe nicht:

ActionScript:
  1. this.onEnterFrame() {
  2.     if (geladen1){
  3.         preloadaufruf(1);
  4.         delete this.onEnterFrame;
  5.         } else {
  6.             //do.nothing.loop()
  7.             }
  8.    
  9.     }

das liegt auf einem der thumbnail container in die der leere container leer_mc erstellt wird indem dann endlich das eigentliche bild reingeladen wird
__________________
x 600.6
y 123.3
dante ist offline   Mit Zitat antworten
Alt 07-01-2004, 13:40   #7 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
nochmal der übersichtliochkeit halber

in der zeitleiste auf em ersten frame:
ActionScript:
  1. function preloadaufruf(i) {
  2.     //for (var i = 1; i <= 4; i++) {
  3.     //var mc = this["thumb"+i];
  4.     var xanf = this._x;
  5.     var yanf = this._y;
  6.     trace("mc_x: " + xanf + "von thumbnailcon. nummer " + i);
  7.     //bildurl = "stuff/" + _global.kundennummer + "/" + _global.kategorie + "_" + i + ".jpg";
  8.     preload (xanf,yanf);
  9.     }
  10.  
  11.  
  12. function preload (xanf, yanf) {
  13.     //variableninitalisierung
  14. var startx = xanf ;//x-anfansgskoordinaten des balkens
  15. var starty = yanf ;//y-anfangskoordinaten des balkens
  16. var breite = 151;//breite des balkens
  17. var hoehe = 4;//hoehe des balkens
  18. var farbe = 0xffd60c;//farbe des balkens
  19. var alpha = 100;// alphawert  des balkens
  20. //var at = getTimer()
  21. //zeichnen des balkens
  22. this.createEmptyMovieClip("balken_mc",1);//erstellt ein mc
  23.         balken_mc._x = startx; 
  24.         balken_mc._y = starty;
  25.         with(balken_mc){
  26.             beginFill(farbe,alpha);
  27.             lineTo(0,hoehe);
  28.             lineTo(breite,hoehe);
  29.             lineTo(breite,0);   
  30.             lineTo(0,0);
  31.             endFill();
  32.             };
  33.  
  34. this.onEnterFrame = function(){  
  35.     var t = leer_mc.getBytesTotal();
  36.     var g = leer_mc.getBytesLoaded();
  37.     //var st = getTimer();
  38.     //var rt = Math.round((st-at)/1000);
  39.     //var et = Math.round((t*rt)/g);
  40.     //var ct = Math.round(-(rt-et));
  41.     if((g == t) && (g > 4) ){
  42.         //was er amchen soll wenn es fertig geladen ist
  43.         balken_mc.clear();
  44.         delete this.onEnterFrame;
  45.             } else {var p = (g/t)*100;
  46.                 balken_mc._xscale = p;
  47.             }
  48. }   
  49. }
  50.  
  51. function thumbladen () {
  52. //schleife zum thumbnail reinladen
  53. for (var i = 1; i <= 4; i++) {
  54.     var mc =this["thumb"+i];
  55.     //var xanf = mc._x;
  56.     //var yanf = mc._y;
  57.     //trace("mx_x: " + xanf );
  58.     bildurl = "stuff/" + _global.kundennummer + "/" + _global.kategorie + "_" + i + ".jpg";
  59.     mc.createEmptyMovieClip("leer_mc",1);
  60.     mc.leer_mc.loadMovie(bildurl);
  61.     this["geladen"+x] = true;
  62.     mc.leer_mc._xscale = 22;
  63.     mc.leer_mc._yscale = 22;
  64.     //trace(mc);
  65.     }
  66. }
  67.  
  68. function bildladen(kat, binu) {
  69.   ///trace("funktion aufgerufen!");
  70.   zuladendesbild = "stuff/" + _global.kundennummer + "/" + kat + "_" + binu + ".jpg"
  71.   //trace(zuladendesbild);
  72.   loadMovie(zuladendesbild, "bildclip_mc");
  73.   //dann noch ne ladefunktion in bildclip_mc schreiben!
  74.   //wirdgeladen = true;
  75. }
  76.  
  77.     thumbladen ();

auf dem thumb(hier numemr einfügen) leigt jeweils ein

ActionScript:
  1. onClipEvent(enterFrame) {
  2.     if (geladen1){
  3.         preloadaufruf(1);
  4.         delete this.onEnterFrame;
  5.         } else {
  6.             //do.nothing.loop()
  7.             }
  8.     }
__________________
x 600.6
y 123.3

Geändert von dante (07-01-2004 um 14:08 Uhr)
dante ist offline   Mit Zitat antworten
Alt 07-01-2004, 14:17   #8 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
ich merke grad preloadaufruf wird irgendwie nicht aufgeführt. woran kann das leigen?

ich blick schon wieder in meinem eigenen code nicht durch. weiss jemand eine vile einfacher lösung hierfür?
__________________
x 600.6
y 123.3
dante ist offline   Mit Zitat antworten
Alt 07-01-2004, 14:26   #9 (permalink)
jungflasher
 
Benutzerbild von sesamstrassenbe
 
Registriert seit: Oct 2002
Ort: Dortmund
Beiträge: 132
und ich muss jetzt leider weg :-/

viel erfolg noch!
__________________
sesamstrassenbert. so viel platz muss sein ;-)

www.digisurf.de
sesamstrassenbe ist offline   Mit Zitat antworten
Alt 07-01-2004, 14:57   #10 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
ich glaube ich habe es jetzt vereinfacht:

ActionScript:
  1. function thumbladen () {
  2. //schleife zum thumbnail 1-4 reinladen
  3. for (var i = 1; i <= 4; i++) {
  4.     //bestimmung des mc's um den sich alles dreht
  5.     var mc =this["thumb"+i];
  6.    
  7.                             //variableninitalisierung für's preloaden
  8. var startx = mc._x;         //x-anfansgskoordinaten des balkens
  9. var starty = mc._y;         //y-anfangskoordinaten des balkens
  10. var breite = 151;         //breite des balkens
  11. var hoehe = 4;        //hoehe des balkens
  12. var farbe = 0xffd60c;      //farbe des balkens
  13. var alpha = 100;            // alphawert  des balkens
  14.  
  15. //zeichnen des balkens
  16. mc.createEmptyMovieClip("balken_mc",4);//erstellt ein mc in thumb_X
  17.         //richtige position bla
  18.         mc.balken_mc._x = startx;      
  19.         mc.balken_mc._y = starty;
  20.         with(mc.balken_mc){
  21.             beginFill(farbe,alpha);
  22.             lineTo(0,hoehe);
  23.             lineTo(breite,hoehe);
  24.             lineTo(breite,0);   
  25.             lineTo(0,0);
  26.             endFill();
  27.             };
  28.    
  29.    
  30.     // das bild ist...
  31.     bildurl = "stuff/" + _global.kundennummer + "/" + _global.kategorie + "_" + i + ".jpg";
  32.     //erstelle den leeren mc
  33.     mc.createEmptyMovieClip("leer_mc",1);
  34.     //lade da rein das bild
  35.     mc.leer_mc.loadMovie(bildurl);
  36.     //zum schluss noch alles skalieren
  37.     mc.leer_mc._xscale = 22;
  38.     mc.leer_mc._yscale = 22;
  39.    
  40.     //jetzt die preload anzeige ausführen
  41.     this.mc.leer_mc.onEnterFrame = function(){   
  42.     //lese die grössen von dem nun nicht mehr leeren mc
  43.     var t = leer_mc.getBytesTotal();
  44.     var g = leer_mc.getBytesLoaded();
  45.    
  46.     if((g == t) && (g > 4) ){
  47.     //wenn es fertig geladen
  48.     //lösch balken plus enterframe
  49.     balken_mc.clear();
  50.     delete this.onEnterFrame;
  51.     } else {// wenn nich fertig geladen
  52.             //prozent des geladenen errechnen + anzeigen
  53.             var p = (g/t)*100;
  54.             balken_mc._xscale = p;
  55.             }   
  56.     }
  57.    
  58.    
  59.    
  60.     }
  61. }
  62.  
  63. function bildladen(kat, binu) {
  64.   zuladendesbild = "stuff/" + _global.kundennummer + "/" + kat + "_" + binu + ".jpg"
  65.   //trace(zuladendesbild);
  66.   loadMovie(zuladendesbild, "bildclip_mc");
  67. }
  68.  
  69.     thumbladen ();


jetzt bin ich so ziemlich an den grenzen meines bisherigen actionscript wissens angekommen: es funktioneiort anscheinend immer noch nicht, d.h. von ladebalken keine spur
__________________
x 600.6
y 123.3
dante ist offline   Mit Zitat antworten
Alt 07-01-2004, 17:07   #11 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
help! i need somoebody! help!!! *lalalalala*
__________________
x 600.6
y 123.3
dante ist offline   Mit Zitat antworten
Alt 08-01-2004, 07:26   #12 (permalink)
jungflasher
 
Benutzerbild von sesamstrassenbe
 
Registriert seit: Oct 2002
Ort: Dortmund
Beiträge: 132
this.mc.leer_mc.onEnterFrame = function()

1. ist das "this" da nicht zuviel?
das hast du doch schon in "var mc =this["thumb"+i];" erledigt...

2. ich würde es mal mit "mc.balken_mc.onEnterFrame" versuchen.
weiss net wie das mit enterFrame bei einem movie ist, der grad noch
geladen wird...

ich bin wieder da! ;-)

daniel
__________________
sesamstrassenbert. so viel platz muss sein ;-)

www.digisurf.de
sesamstrassenbe ist offline   Mit Zitat antworten
Alt 08-01-2004, 08:40   #13 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
1. ja. ich habs mal weg gemacht

2. weiss ich leider auch nciht *G* habs mal geändert, danke


so was mir noch ins auge gefallen ist (*aua* ) :



ActionScript:
  1. mc.balken_mc.onEnterFrame = function(){
  2.                         //lese die grössen von dem nun nicht mehr leeren mc
  3.                         var t = leer_mc.getBytesTotal();
  4.                         var g = leer_mc.getBytesLoaded();

muss da leer_mc nicht mc.leer_mc sein? ich bin im mom total verwirrt mit dem ansprechen der mc's.
__________________
x 600.6
y 123.3
dante ist offline   Mit Zitat antworten
Alt 08-01-2004, 08:56   #14 (permalink)
jungflasher
 
Benutzerbild von sesamstrassenbe
 
Registriert seit: Oct 2002
Ort: Dortmund
Beiträge: 132
mc.balken_mc.onEnterFrame = function()

stimmt...

"getBytesTotal();" und "getBytesLoaded();" musst du über "_root.mc..." adressieren, oder?
"_parent.leer_mc" müsste wohl auch klappen...

und "balken_mc" kannst du durch "this" ersetzen.

hab jetzt nicht geschaut, ob es woanders noch 'zweifelhafte' adressierungen gibt...

irgendwann muss das doch klappen ;-)
__________________
sesamstrassenbert. so viel platz muss sein ;-)

www.digisurf.de

Geändert von sesamstrassenbe (08-01-2004 um 09:02 Uhr)
sesamstrassenbe ist offline   Mit Zitat antworten
Alt 08-01-2004, 09:03   #15 (permalink)
=)
 
Benutzerbild von dante
 
Registriert seit: Jun 2003
Beiträge: 499
wie egsagt im mom bin ich mit der ansprache von mc's total aus dem takt gekommen

das ganze ding leigt auf einem frame

in der selben TL liegen die thumb1-4 dinger und in jedem dieser dinger soll ein leer_mc und ein balken_mc erstellt werden. in leer_mc lade ich das bild rein und in balken_mc ist der ladebalken für den preloader drin.

ich habs jetzt mal s getestet

ActionScript:
  1. //jetzt die preload anzeige ausführen
  2.     mc.balken_mc.onEnterFrame = function(){  
  3.     //lese die grössen von dem nun nicht mehr leeren mc
  4.     var t = mc.leer_mc.getBytesTotal();
  5.     var g = mc.leer_mc.getBytesLoaded();

und es funktioniert nicht. da ich ja immer noch auf der (ich nenn sie mal thumb-) TL bin (und das enterframe ja auch muss ich doch nur mc.leer_mc angeben um den mc anzusprechen.

da fällt mir grad beim schreiben auf: das onenterframe wird ja in mc.balken_mc ausgefürt also müsste der leer_mc von dort aus über

_parent.leer_mc erreichbar sein

ich teste das jetzt mal hoffentlich klappt es. bin hier am verzweifeln
__________________
x 600.6
y 123.3
dante 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 02:10 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele