Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 31-01-2006, 02:35   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Unhappy scrollen eines dynamisch erstellten Thumbnailblocks

Hallo,
ich erzeuge mit folgendem Skript einen Block von 4 x n Thumbnails, die dynamisch nach- und nebeneinander aufgereiht werden, klappt ganz gut ;-) Lasst euch nicht von den _x und _y Werten verwirren, die sind deshalb so lang, damit sich die Bilder neben- und untereinander aufreihen.
PHP-Code:
MovieClip.prototype.attache = function() {
    
trace("attache"); //Die Funktion wird später bei "menu" angefügt
    
for (t=1t<=20t++) {
        var 
thumb createEmptyMovieClip("tmb"+tt);
        var 
nr t;
        while (
nr.toString().length<2) {
            
//damit aus 1,2,...,9 folgendes wird: 01,02,...,09
            
nr "0"+nr;
        }
        if (
t<=9) {
            
thumb.id "0"+t;
        } else {
            
thumb.id t;
        }
        
thumb.createEmptyMovieClip("bild"1);
        
thumb.bild.loadMovie("thumbs/"+nr+dateiname);//dateiname ist die Variable für eine Endung wie "_bild.jpg", die ganze Adresse schaut also dann so aus: "thumbs/02_bild.jpg"
        
thumb._y tmbheight*Math.floor((t-1)/tmbzahl); //tmbheigt und tmbwidth beziehen sich auf die thumbnails
        
thumb._x += leftalign+tmbwidth*(t-1)-Math.floor((t-1)/tmbzahl)*tmbzahl*tmbwidth;
        
thumb._alpha tmbalpha;
        
//Mouse actions
        
thumb.onRollOver = function() { //Das thumbnail wird von alpha=80 auf alpha=100 gefaded
            
this.fadeIn(10);
        };
        
thumb.onRollOut = function() {//und wieder langsam zurück
            
this.fadeOut(5);
        };
        
thumb.onPress = function() {
            
this._parent.con.goOut(2);//der container "con" in den das große Bild geladen wird, faded aus
            
this._parent.btn.goOut(5);//sowie ein button
            
this._parent.con.import(this.id);//und das nächste Bild wird im Hintergrund in con geladen
        
};
    }

//und danach folgen die Definitionen der Funktionen 
Das Problem besteht jetzt darin, dass es einfach zu viele Thumbs für eine Bildschirmseite sind, und ich den Block als ganzes gerne nach oben und nach unten fahren lassen möchte (ob automatisch oder manuell ist jetzt nicht so wichtig)

Das ist der Lösungsansatz, aber irgendwie funktioniert der nicht:
PHP-Code:
this.createEmptyMovieClip("menu"2000);
this.menu.attache(); //attache obrige Funktion
with(this.menu) {
_x 100;
_y 0;
/*------
Rechteck zeichnen um die Bewegung zu sehen
    lineStyle(1, 0x333333, 100);
    beginFill(0xff0000, 20);
    lineTo(0, 20);
    lineTo(0, 0);
    lineTo(20, 0);
    lineTo(20, 20);
    endFill();
*/
}
//onEnterFrame --> Bewegung
var umkehrpunkt Stage.height/2;
this.onEnterFrame = function () {
    var 
diff _ymouse-umkehrpunkt;
    
trace(this.menu._y);
    if (
diff>&& _xmouse<=500) {
        
this.menu._y -= diff*diff/5000;
    } else if (
diff<&& _xmouse<=500) {
        
this.menu._y += diff*diff/5000;
    } 
Wenn ich "menu" ein Rechteck zeichnen lasse, fährt das wunderschön hoch und runter. Aber ich will eigentlich, dass der Block an Thumbnails IN dem mc "menu" erstellt wird und somit hoch und runterfährt. (Hier kommt noch ein 2. Problem zum tragen: Wenn ich auf eines der Thumbnails klicke, und damit das mainimg in den container "con" lade, bewegt sich das Rechteck nicht mehr...)

Ich hab mir überlegt, dass es vielleicht daran liegen könnt, dass den thumbs in der attach-funktion dynamisch Positionswerte zugeschrieben werden, und sich diese _x und _y Angaben einfach über die unteren Veränderungen von +=3 hinwegsetzen.
Aber wenn ich die Lösung wüsste würd ich jezt nicht hier reinschreiben...

Bitte beeilt euch, wenn ihr mir helfen könnt oder noch mehr details braucht, das Projekt ist ziemlich wichtig :-/

Geändert von Beezle-Bug (31-01-2006 um 22:12 Uhr) Grund: Aktualisierung des Codes
Beezle-Bug ist offline   Mit Zitat antworten
Alt 31-01-2006, 22:15   #2 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
kann mir bitte jemand helfen
Beezle-Bug ist offline   Mit Zitat antworten
Alt 31-01-2006, 22:54   #3 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
das kommt mir ziemlich bekannt vor?!?

so sollte es funktionieren:
ActionScript:
  1. var depth = 0;
  2. var rows = 3;
  3. var cols = 5;
  4. var breite = 50;
  5. var hoehe = 50;
  6. MovieClip.prototype.attache = function() {
  7.     trace("attache"); //Die Funktion wird später bei "menu" angefügt
  8.     for( var i=0; i<rows; i++){
  9.         for( var j=0; j<cols; j++){
  10.             ++depth;   
  11.             var thumb = this.createEmptyMovieClip("tmb"+depth,depth);
  12.             var nr = depth;
  13.             while (nr.toString().length<2) {
  14.              //damit aus 1,2,...,9 folgendes wird: 01,02,...,09
  15.                 nr = "0"+nr;
  16.             }
  17.             if (depth<=9) {
  18.                 thumb.id = "0"+depth;
  19.             } else {
  20.                 thumb.id = depth;
  21.             }
  22.             thumb.createEmptyMovieClip("bild", 1);
  23.             thumb.bild.loadMovie("thumbs/"+nr+dateiname);//dateiname ist die Variable für eine Endung wie "_bild.jpg", die ganze Adresse schaut also dann so aus: "thumbs/02_bild.jpg"
  24.             thumb._y = i*50;
  25.             thumb._x = j*50;
  26.             thumb._alpha = tmbalpha;
  27.             //Mouse actions
  28.             thumb.onRollOver = function() { //Das thumbnail wird von alpha=80 auf alpha=100 gefaded
  29.                 this.fadeIn(10);
  30.          };
  31.             thumb.onRollOut = function() {//und wieder langsam zurück
  32.                 this.fadeOut(5);
  33.             };
  34.             thumb.onPress = function() {
  35.                 this._parent.con.goOut(2);//der container "con" in den das große Bild geladen wird, faded aus
  36.                 this._parent.btn.goOut(5);//sowie ein button
  37.                 //this._parent.con.import(this.id);//und das nächste Bild wird im Hintergrund in con geladen
  38.             };
  39.         }
  40.     }
  41. }
  42.  
  43. this.createEmptyMovieClip("menu", 2000);
  44. this.menu.attache(); //attache obrige Funktion
  45.  
  46. //onEnterFrame --> Bewegung
  47. var umkehrpunkt = Stage.height/2;
  48. this.onEnterFrame = function () {
  49.     var diff = _ymouse-umkehrpunkt;
  50.      
  51.     if (diff>0 && _xmouse<=500) {
  52.         this.menu._y -= diff*diff/5000;
  53.     } else if (diff<0 && _xmouse<=500) {
  54.         this.menu._y += diff*diff/5000;
  55.     } 
  56. }
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 31-01-2006, 23:34   #4 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Hi erstmal danke für die flotte Antwort!
(ist ja super, gleich den chef persönlich da zu haben ;-)

Aber außer dass mein code jetzt ein gutes stück übersichtlicher geworden ist, hat sich nichts getan

Der Thumbblock klebt jetzt links oben in der Ecke (musste den _y Wert noch ändern
PHP-Code:
thumb._y tmbheight*i-tmbheight
)

und mein menüdummy fährt munter auf und ab, aber leer....

Bei deinem Original sind die Bilder ja über ein Arrey reingekommen, hier jetzt über create Movieclips, macht das einen unterschied?

Alle functionen sind ja nur für's faden und laden in die container zuständig, können also keine Schuld haben. Evtl ist auch bei den _parent, _root, _level0 Pfaden der Wurm drin?
arrrg das muss doch wohl zu schaffen sein ;-)

PS: Es muss ja nicht mal so ein smoother slide sein, ich würde mich auch schon mit einem Button beknügen, bei dem einfach alles um 3 Reihen nach unten rutscht

Geändert von Beezle-Bug (31-01-2006 um 23:36 Uhr)
Beezle-Bug ist offline   Mit Zitat antworten
Alt 31-01-2006, 23:35   #5 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
haste den code kopiert?
der funktioniert!
menu._x und menu._y kannste doch einstellen
__________________
hang loose
Majo ist offline   Mit Zitat antworten
Alt 31-01-2006, 23:44   #6 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Thumbs up

Ich nehm alles zurück, der Code funktioniert!
wenn ich ihn in einen leeren flash packe - aber in meinem Wust scheint irgendwo noch eine Störvariable zu sitzten, da klappts nicht ;-)

Werd diese Nacht wohl damit verbringen, sie zu finden...

merci nochmal
Beezle-Bug ist offline   Mit Zitat antworten
Alt 01-02-2006, 00:53   #7 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
So der Fehler ist gefunden, die Lösung noch nicht.
Den bestimmt tollen Preloader hab ich aufgrund des zu gigantischen as wegen gegen was leichteres erstzt (sry*), aber anscheinend war das doch nicht so eine gute Idee.
Vielleicht kannst du, oder jemand anderes, mir trotzdem helfen.

Folgendes liegt in der _root./_level0:

PHP-Code:
//----------------------------------------------
//Preloader
//----------------------------------------------
this.ladebalken.laden = function(idfin) {
    
con._alpha 0;
    
info.txt.text "Hier steht die Beschreibung zu Bild "+id;
    
this._visible true;
    
this.balken._xscale fin;
    
this.strich._x this.balken._width;
    
this.strich.prozenttext.text fin+" %";
    
this.progress_txt.text "loading : Bild"+id+" - "+Math.round(_level0.con.getBytesLoaded()/1024)+" kb / "+Math.round(_level0.con.getBytesTotal()/1024)+" kb   ";
};
this.ladebalken.fertig = function(idfin) {
    
this.progress_txt.text "loaded : Bild"+id;
    
this._visible false;
    
this.onEnterFrame = function() {
        if (
con._alpha<=100) {
            
con._alpha += 10;
        } else {
            
trace("laden fertig");
            
delete this.onEnterFrame;
        }
    };
}; 

Und dieser Schnipsel ist eingebettet in die Funktion attache, liegt also in den Klammern von dem anfänglich geposteten AS und wird bei "this.onPress" aufgerufen, wie in dem allererstem Skript:

PHP-Code:
MovieClip.prototype.import = function(id) {
        
this.visible true;
        
this._alpha 0;
        
this.loadMovie("pics/"+id+dateiname);
        
onEnterFrame = function () {
            
// Preloader, kontinuierliche Überprüfung des Ladevorgangs
            
var fin int(_level0.con.getBytesLoaded()*100/_level0.con.getBytesTotal());
            
// Prozentwerte berechnen
            
trace("fin="+fin);
            
_level0.ladebalken.laden(idfin);
            if (
fin>=100 && _level0.con._width>&& _level0.con._height>0) {
                
// wenn alles geladen wurde...
                
delete this.onEnterFrame;
                
_level0.ladebalken.fertig(idfin);
                
// dann den Event wieder löschen
            
}
        };
    }; 
Was passt da mit der Verknüpfung nicht? Muss da noch ein _parent mehr rein, weil die funktion "attache" ja von dem erstelltem MC "menu" ausgeführt wird?

Das Problem ist konkret folgendes: Alles funktioniert ;-) (Also, scrollen des Thumbnailblocks und das reinladen und reinfaden der zugehörigen Bilder in den Container "con")
NUR: Nachdem das 1. Bild geladen ist, funktioniert die Scroll Funktion nicht mehr Es werden aber weiterhin die richtigen Bilder in den con geladen. Irgendwas scheint mir da evtl auch ein onEnterFrame zu nichte zu machen, oder so.?
Ich komm einfach nicht voran.
Beezle-Bug ist offline   Mit Zitat antworten
Alt 01-02-2006, 04:09   #8 (permalink)
{flasher}
 
Benutzerbild von Majo
 
Registriert seit: Mar 2003
Ort: on water
Beiträge: 2.823
nenn deinen prototypen nicht import, das ist ein reserviertes wort

ActionScript:
  1. MovieClip.prototype.import = function(id) {
  2.         this.visible = true;
  3.         this._alpha = 0;
  4.         this.loadMovie("pics/"+id+dateiname);
  5.         onEnterFrame = function () {
  6.             // Preloader, kontinuierliche Überprüfung des Ladevorgangs
  7.             var fin = int(_level0.con.getBytesLoaded()*100/_level0.con.getBytesTotal());
  8.             // Prozentwerte berechnen
  9.             trace("fin="+fin);
  10.             _level0.ladebalken.laden(id, fin);
  11.             if (fin>=100 && _level0.con._width>0 && _level0.con._height>0) {
  12.                 // wenn alles geladen wurde...
  13.                 delete this.onEnterFrame;//<- das zerstört deinen slider
  14.                 _level0.ladebalken.fertig(id, fin);
  15.                 // dann den Event wieder löschen
  16.             }
  17.         };
  18.     };

zweimal onEnterFrame....

ps: das loader-as hat doch nur 13 kb?!?
__________________
hang loose

Geändert von Majo (01-02-2006 um 04:14 Uhr)
Majo ist offline   Mit Zitat antworten
Alt 12-02-2006, 21:00   #9 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 111
Question Neue Frage: Flash soll Nummern überspringen

Hi Majo, hi ihr Flasher da draußen.

Die Frage hat nichts mehr mit dem da drüber zu tun, spielt aber im selben Codeblock. Hier werden ja nacheinander Thumbnails reingeladen und in Reihen und Spalten sortiert. Von 1 bis 26, oder was ich halt angebe. Da alle Bilder "thumbs/"+nr+dateiname heißen ist jeder eindeutig identifizierbar, anhand von der Nummer und kriegt die, der Nummer zugewiesene Position.

Was ist aber jetzt, wenn ein Bild, z.B. Nr.8 nicht im Ordner ist? naja, ich weiß es: der Platz bleibt leer. Das schaut aber ziemlich blöd aus ,-) Also, wie kann ich flash sagen dass, wenn ein Bild nicht da ist, es eine Nummer höher schauen soll usw.?

Hier nochmal die Stelle, um die es geht:

PHP-Code:
MovieClip.prototype.attache = function() {
    
trace("attache");
    
//Die Funktion wird später bei "menu" angefügt 
    
for (var 0i<rowsi++) {
        for (var 
0j<colsj++) {
            ++
depth;
            var 
thumb this.createEmptyMovieClip("tmb"+depthdepth);
            var 
nr depth;
            while (
nr.toString().length<2) {
                
//damit aus 1,2,...,9 folgendes wird: 01,02,...,09 
                
nr "0"+nr;
            }
            
thumb.id depth;
            
thumb.createEmptyMovieClip("bild"1);
            
thumb.bild.loadMovie("thumbs/"+nr+dateiname); 
merci
__________________
O Genie der Herr ehre dein Ego
Beezle-Bug 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 06:17 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele