Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-07-2003, 04:29   #1 (permalink)
ANCORA IMPARO
 
Benutzerbild von snkr
 
Registriert seit: Jan 2002
Ort: Frankfurt
Beiträge: 298
preloaden und überblenden

Vielleicht liest ja Mati nochmal...

das problem mit diesem kurzen und auch recht einfach gestricktem skript ist, das es mal funzt und mal nicht. es werden bilder in container geladen und danach überblendet. dies funzt bei den ersten bildern wunderbar, aber nach einigen bildern fängt es an, nicht mehr zu überblenden oder nur kurz.

vielleicht sieht jemand an irgendeiner abfrage, wo er durcheinanderkommt, ich habe schon viel getestet, aber nix funzt richtig.

ActionScript:
  1. function swapper()
  2. {
  3.     if (container1.getDepth() == 101)
  4.     {
  5.         picloader._xscale = 0;
  6.         container2._alpha = 0;
  7.         container2.swapDepths(container1);
  8.         container2.picture.loadPic(currentFile);
  9.         container2.onEnterFrame = function()
  10.         {
  11.             prev_btn.enabled = false;
  12.             next_btn.enabled = false;
  13.             if (container2.getBytesLoaded() < container2.getBytesTotal())
  14.                 picloader._xscale = Math.ceil( container2.getBytesLoaded() / container2.getBytesTotal() * 100 );
  15.             else
  16.             {
  17.                 picloader._xscale = 100;
  18.                 if (container2._alpha < 100)
  19.                     container2._alpha += 5;
  20.                 else
  21.                 {
  22.                     prev_btn.enabled = true;
  23.                     next_btn.enabled = true;
  24.                     delete container2.onEnterFrame;
  25.                 }
  26.             }
  27.         }
  28.     }
  29.     else
  30.     {
  31.         picloader._xscale = 0;
  32.         container1._alpha = 0;
  33.         container1.swapDepths(container2);
  34.         container1.picture.loadPic(currentFile);
  35.         container1.onEnterFrame = function()
  36.         {
  37.             if (container1.getBytesLoaded() < container1.getBytesTotal())
  38.                 picloader._xscale = Math.ceil( container1.getBytesLoaded() / container1.getBytesTotal() * 100 );
  39.             else
  40.             {
  41.                 picloader._xscale = 100;
  42.                 if (container1._alpha < 100)
  43.                     container1._alpha += 5;
  44.                 else
  45.                 {
  46.                     prev_btn.enabled = true;
  47.                     next_btn.enabled = true;
  48.                     delete container1.onEnterFrame;
  49.                 }
  50.             }
  51.         }
  52.     }
  53. }
__________________
You can't always get what you want! But if you try sometimes you might find - you get what you need!
snkr ist offline   Mit Zitat antworten
Alt 28-07-2003, 11:42   #2 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 51
vielleicht hilft eine "if gebytesloaded > 100" bedingung vor der "preload schleife" (if (container2.getBytesLoaded() < container2.getBytesTotal())
picloader._xscale = Math.ceil( container2.getBytesLoaded() / container2.getBytesTotal() * 100 );
else)

oder du setzt intervalle, die das alles alle 0.1 sec nur ausführen...

weiß nicht genau ob es helfen würde aber probieren kann man es.

Geändert von trebek (28-07-2003 um 11:44 Uhr)
trebek ist offline   Mit Zitat antworten
Alt 28-07-2003, 14:15   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2001
Beiträge: 21
@snkr

hast du das von trebek schon getestet?

oda vielleicht inzwischen eine andere Lösung gefunden?



ich glaube, dass ich eine ähnliche Aufgabenstellung habe wie Du. Bei mir müssen ganz viele Bilder hintereinanden (also als lineare Diashow) angezeigt werden, dabei soll zwischen den einzelnen Bildern eine weiche überblendung stattfinden. Da ich von AS nicht sonderlich viel Ahnung habe, habe ich jedes bild in eine eigene swf gesteckt, diese werden jeweils bereits preloaded während das vorangegangene bild noch angezeigt wird. Sobald das vorangegangene bild ausblendet wird das vorher preloadete bild eingeblendet - so kriege ich einen weichen übergang. Das Prinzip ist aba sehr umständlich und unübersichtilich, deshalb interessiert mich dein Lösungsansatz sehr ...
wladi ist offline   Mit Zitat antworten
Alt 29-07-2003, 12:31   #4 (permalink)
ANCORA IMPARO
 
Benutzerbild von snkr
 
Registriert seit: Jan 2002
Ort: Frankfurt
Beiträge: 298
so, ******* studium, nur stress...


@trebek - getbytesloaded gibt doch eine absolute zahl der schon geladenen bytes zurück - wieso dann die abfrage


kein anderer eine idee, woran es liegen könnte?
__________________
You can't always get what you want! But if you try sometimes you might find - you get what you need!
snkr ist offline   Mit Zitat antworten
Alt 29-07-2003, 15:01   #5 (permalink)
Herr Brot
 
Benutzerbild von mati
 
Registriert seit: Dec 2002
Beiträge: 1.692
hi snkr,


vielleicht habe ich heut abend mehr zeit, so auf die schnelle würde ich auch sagen, du musst noch abfragen ob die getBytesTotal() größer 4 sind. ich meld mich nochmal,


so far, mati
__________________
„Ich war geheilt, all right!“
mati ist offline   Mit Zitat antworten
Alt 29-07-2003, 15:25   #6 (permalink)
ANCORA IMPARO
 
Benutzerbild von snkr
 
Registriert seit: Jan 2002
Ort: Frankfurt
Beiträge: 298
jetzt hab ich den sinn verstanden, aber funzen tut es trotzdem nicht.

naja, ich geh jetzt erstmal schlafen, bis morgen dann... und vielen dank schon erstmal
__________________
You can't always get what you want! But if you try sometimes you might find - you get what you need!
snkr ist offline   Mit Zitat antworten
Alt 29-07-2003, 18:49   #7 (permalink)
Herr Brot
 
Benutzerbild von mati
 
Registriert seit: Dec 2002
Beiträge: 1.692
Zitat:
Geschrieben von snkr
naja, ich geh jetzt erstmal schlafen, bis morgen dann... und vielen dank schon erstmal
wie bist du denn drauf? schläfst du immer fast den ganzen tag? ich auch will!
oki, nun mal zu deinem code:
ActionScript:
  1. matiswapper = function() {
  2.     currentconti = container1.getDepth == 101 ? container2 : container1;
  3.     oldconti = currentconti == container2 ? container1 : container2;
  4.     picloader._xscale = 0;
  5.                 currentconti._alpha = 0;
  6.                 currentconti.swapDepths(oldconti);
  7.                 currentconti.picture.loadPic(currentFile);
  8.         currentconti.onEnterFrame = function() {
  9.             var bloaded = this.picture.getBytesLoaded();
  10.             var btotal = this.picture.getBytesTotal();
  11.             if(bloaded >= btotal && btotal > 4) {
  12.                 picloader._xscale = 100;
  13.                 if(this._alpha<100) {
  14.                     this._alpha+=5;
  15.                 } else {
  16.                     prev_btn.enabled = next_btn.enabled = true;
  17.                     delete this.onEnterFrame;
  18.                 }
  19.             } else {
  20.                 picloader._xscale = Math.ceil(bloaded/btotal*100);
  21.             }
  22.         }
  23.     }
  24. }

so hab ich das jetzt mal gemacht, ich denke das müsste funktionieren. ich habe zum einen den code gekürzt indem ich dynamisch referenzen auf container1 bzw. 2 erstelle. somit brauch ich nicht alles doppelt schreiben, das ist doch etwas unnütz.
zum anderen habe ich zwei dinge geändert bzw. hinzugefügt.
1. eine abfrage ob die getBytesTotal > 4 sind, das solltest du immer, ansonsten gibt's probleme weil flash am anfang oftmals 4 als BytesTotal zurückliefert weil es die dateigröße nicht gleich einlesen kann. um dies zu machen hab ich dann auch die if-abfrage andersrum gestellt wie du, also nicht if (geladen<total) sondern if(geladen>=total)
2. der pfad zur abfrage der bytes kann meines erachtens nicht stimmen, du hast die bytes von container1 bzw. 2 abgefragt, ich denke aber es müssen die bytes des mcs picture innerhalb von container1 bzw. 2 abgefragt werden.


so far, mati
__________________
„Ich war geheilt, all right!“
mati ist offline   Mit Zitat antworten
Alt 30-07-2003, 02:11   #8 (permalink)
ANCORA IMPARO
 
Benutzerbild von snkr
 
Registriert seit: Jan 2002
Ort: Frankfurt
Beiträge: 298
was heisst hier den ganzen tag schlafen, ich schlafe nachts, wenn bei euch da tag ist kann ich ja auch nichts dafür. aber was denkst du, wie schön schnell das ff ist, wenn man der einzige user ist. (bei euch ist es jetzt 3:15)


auf alle fälle vielen dank, es lag tatsächlich daran, dass ich die bytes von container und nicht von picture abgefragt habe. ich dachte das müsste ja eigentlich egal sein, da picture in container liegt. aber egal, es funzt jetzt wunderbar.

dass du es gekürzt hast ist auch nett, sowas mache ich meist erst ganz zum schluss, weil es bei fragen dann für andere leichter zu lesen ist.

also, besten dank nochmal
__________________
You can't always get what you want! But if you try sometimes you might find - you get what you need!
snkr ist offline   Mit Zitat antworten
Alt 30-07-2003, 06:37   #9 (permalink)
Herr Brot
 
Benutzerbild von mati
 
Registriert seit: Dec 2002
Beiträge: 1.692
ach so... uups, Ort: Melbourne!

ich dachte schon: sagt um 16:15 gute nacht und will erst am nächsten tag wieder aufstehen


mati
__________________
„Ich war geheilt, all right!“
mati 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:21 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele