Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-10-2006, 21:22   #1 (permalink)
Ein Alter User
 
Benutzerbild von jotti
 
Registriert seit: Mar 2004
Ort: Österreich
Beiträge: 159
Question Laufband Slider yogola oder so

Hallo!

Ich bin kurz vor der Lösung aber ich habe noch ein ein kleines Problem.
Ich habe in meiner Hauptzeitleiste (1Bild) einen leeren Movieclip mit der Instanz mc erstellt.Im 1 Bild dieses Movieclips habe ich den angehängten code eingefügt.Bis hierher funktioniert alles.
Meine Frage wie kann ich den mc automatisch nach links verschieben ? mc._x = mc._x+1
Möcht gerne eine Endlosschleife machen. Wenn bild 1 außerhalb der bühne liegt sollte es sich an Bild 8 wieder anhängen.

Ich lade Bilder dynamisch aus meinen Ordner "Bilder".
PHP-Code:
var bildanzahl=6;
var 
1;
var 
speed 2;
var 
abstand 3;
laden = function () {
    if (
i<=a) {
        
_root.createEmptyMovieClip('pic'+ii);
        
_root['pic'+i].loadMovie("bilder/"+i+'.jpg'0);
        
_root.onEnterFrame = function() {
            if (
_root['pic'+i]._width>0) {
                
_root['pic'+i]._y 0;
                
_root['pic'+i]._x _root['pic'+(i-1)]._x+_root['pic'+(i-1)]._width+abstand;
                
delete this.onEnterFrame;
                
i++;
                
laden();
            }
        };
    }
};
laden(); 
Irgendwie fehlt es an meinen Flashkentnissen.

Thx Jotti

Geändert von jotti (05-10-2006 um 21:24 Uhr)
jotti ist offline   Mit Zitat antworten
Alt 05-10-2006, 22:32   #2 (permalink)
:Void
 
Benutzerbild von janoshnosh
 
Registriert seit: Jun 2005
Ort: börlin
Beiträge: 931
ActionScript:
  1. [..]
  2.                 _root['pic'+i]._x = _root['pic'+(i-1)]._x+_root['pic'+(i-1)]._width+abstand;
  3. ///
  4.                 _root['pic'+(i+1)].onEnterFrame = function () {
  5.                    this._x --;
  6.                    if (this._x ist außerhalb der bühne) {
  7.                       //häng dich an
  8.                       //also: this._x = neuesX;
  9.                    }
  10.                 }
  11.                 delete this.onEnterFrame;
  12. [..]
an welches bild genau sich das bild nun anhängen soll, verbleibt etwas unklar - eine "endlosschleife" macht man zumindest so ^^. vielleicht hilft das ja erstmal.
(eine endlosschleife ist streng genommen etwas ganz anderes, nämlich eine while-schleife die niemals endet - onEnterFrame ist einfach die prozedur, die bei jedem bildaufbau ausgeführt wird).

gruß janosch
janoshnosh ist offline   Mit Zitat antworten
Alt 07-10-2006, 10:47   #3 (permalink)
Ein Alter User
 
Benutzerbild von jotti
 
Registriert seit: Mar 2004
Ort: Österreich
Beiträge: 159
Aw

Wenn ich das so reinschreibe löscht es mir ja das onEnterFrame.
Kann ich das mit den } irgendwie steuern ?
Ich müsste nur das 2 onEnterFrame löschen. Aber wie?


PHP-Code:
var bildanzahl=6;
var 
1;
var 
speed 2;
var 
abstand 3;
var 
xy a;
laden = function () {
    if (
i<=a) {
        
_root.createEmptyMovieClip('pic'+ii);
        
_root['pic'+i].loadMovie("bilder/"+i+'.jpg'0);
        
_root.onEnterFrame = function() {
            if (
_root['pic'+i]._width>0) {
                
_root['pic'+i]._y 0;
                
_root['pic'+i]._x _root['pic'+(i-1)]._x+_root['pic'+(i-1)]._width+abstand;
                
_root['pic'+(i+1)].onEnterFrame = function() {
                    if (
_root['pic'+i]._x<=-500) {
                        
trace("-500");
                    }
                    
delete this.onEnterFrame;
                    
i++;
                    
laden();
                };
            }
        };
    }
};
laden(); 
Thx Jotti
jotti ist offline   Mit Zitat antworten
Alt 09-10-2006, 18:55   #4 (permalink)
Ein Alter User
 
Benutzerbild von jotti
 
Registriert seit: Mar 2004
Ort: Österreich
Beiträge: 159
Question Aw

Hallo hab es jetzt so gemacht.:

Dies steht im bild 1 auf der Hauptzeitleiste (ebene 1)
PHP-Code:
var 1
start1 
= function () {
    if (
x<=2) {
        
this.onEnterFrame = function() {
            
this.mc._x=this.mc._x-1
            delete this
.onEnterFrame;
            
start1();
        };
    }
};
start1(); 
Dies steht im bild 1 im Movieclip mc
PHP-Code:
var bildanzahl=6;
var 
1;
var 
speed 2;
var 
abstand 3;
var 
xy a;
laden = function () {
    if (
i<=a) {
        
this.createEmptyMovieClip('pic'+ii);
        
this['pic'+i].loadMovie("bilder/"+i+'.jpg'0);
        
this.onEnterFrame = function() {
            if (
this['pic'+i]._width>0) {
                
this['pic'+i]._y 0;
                
this['pic'+i]._x this['pic'+(i-1)]._x+this['pic'+(i-1)]._width+abstand;
                
trace(this['pic'+i]);
                
/*this['pic'+(i+1)].onEnterFrame = function() {
                this._x--;
                /*if (this._x=-500) {
                //häng dich an
                //also: this._x = neuesX;                   
                }*/
                
delete this.onEnterFrame;
                
i++;
                
laden();
            }
        };
    }
};
laden(); 
Wo schreibe ich jetzt am besten die überprüfung rein damit sich mc 1 an mc 6 wieder anhängt ? Hat wer einen Idee.

Die Überprüfung was das letzte bild sein soll habe ich mir ungefähr so vorgestellt.
PHP-Code:
var le=// das letzte bild
if (this['pic'+i]._x<= -500) {
this._x this['pic'+le]._x+this['pic'+le]._width
le 
this


Thx Jotti

Geändert von jotti (09-10-2006 um 18:57 Uhr)
jotti ist offline   Mit Zitat antworten
Alt 09-10-2006, 19:52   #5 (permalink)
:Void
 
Benutzerbild von janoshnosh
 
Registriert seit: Jun 2005
Ort: börlin
Beiträge: 931
hallo nochmal,

zuerst einmal sorry, dieses von mir vorgeschlagene
Code:
this['pic'+(i+1)].onEnterFrame
ist natürlich totaler blödsinn, es muss natürlich "this['pic'+i].onEnterFrame" heißen. denn i+1 ist ja noch gar nicht vorhande. keine ahnung wie ich auf i+1 kam.

aber:
hast du dir überhaupt einmal überlegt, was genau in deinem film passieren soll und wie das, was passieren soll ablaufen soll?
du möchtest dynamisch bilder laden, und diese sollen sich dann bewegen, und zwar so, dass sie scheinbar endlos über den schirm wandeln.

dazu sind drei völlig verschiedene programmieraufgaben zu erledigen!
1. die bilder müssen geladen werden, eins nach dem andern
2. DANN erst kann es weiter gehen, sonst hoppelt das erste bild schon einsam über die bühne, weil es beim zweiten halt ein bisschen länger dauert und der lifestream im hintergrund beim user die nötige bandbreite aufgegessen hat.
2. also, die bilder müssen positioniert werden, eins neben dem anderen, und dann sollen sie sich bewegen (alle gleichzeitig, wie ich annehme!)
3. die programmierung der bewegung ist dann die dritte aufgabe.


bei dir scheint ein bisschen das konzept zu fehlen - versuch doch, dir die arbeit zu gliedern. funktionen sind da bestens geeignet für. den preloader hast du ja schon. du musst im preloader nur noch abfragen, wann alles geladen ist, dann gehts weiter zur funktion, die die mcs positioniert und aneinanderfügt.

schreibe keinen code auf mcs, sondern alles auf die hauptzeitleiste.

z.b. so:
ActionScript:
  1. var bilderListe = new Array ();
  2. lade();
  3.  
  4. function bewege () {
  5.     for (var i = 0; i < bilderListe.length; i++) {
  6.         bilderListe[i].onEnterFrame = function () {
  7.             this._x -= speed;
  8.             if (this._x -= -500) {
  9.                 //bild wird an den Vorgänger angehängt
  10.                 this._x = this.vorgaenger._x + this.vorgaenger._width + abstand;
  11.             }
  12.         }
  13.     }
  14. }
  15.  
  16. function positioniere () {
  17.     //erstes Bild wird gesetzt
  18.     bilderListe[0]._x = 0;
  19.     bilderListe[0].vorgaenger = bilderListe[bilderListe.length-1];
  20.     for (var i = 1; i < bilderListe.length; i++) {
  21.         var bild = bilderListe[i];
  22.         //Vorgänger wird bestimmt
  23.         var vorgaenger = bilderListe[i-1];
  24.         bild._x = vorgaenger._x + vorgaenger._width + abstand;
  25.         //jedes bild bekommt eine referenz zum vorgänger
  26.         bild.vorgaenger = vorgaenger;
  27.     }
  28.     trace("Bilder sind in Position.");
  29.     bewege();
  30. }
  31.  
  32. function lade () {
  33.     if (i <= a) {
  34.         var bild = this.createEmptyMovieClip('pic'+i, i);
  35.             bild.loadMovie("bilder/"+i+'.jpg', 0);
  36.         bilderListe.push(bild);
  37.         this.onEnterFrame = function() {
  38.             if (bild._width>0) {
  39.                 bild._y = 0;
  40.                 trace(bild);
  41.                 delete this.onEnterFrame;
  42.                 i++;
  43.                 laden();
  44.             }
  45.         }
  46.     }
  47.     else {
  48.         trace("Alle Bilder geladen.");
  49.         positioniere();
  50.     }
  51. }
das soll jetzt so nicht funktionieren, und ich gebe zu, dass die funktion "bewege" eigentlich auch mit der funktion "positioniere" verknüpft werden könnte. ein besonderes augenmerk solltest du auf den "vorgaenger" richten. das ist für solche zwecke eine ganz gute technik.

so jetzt habe ich viel geschrieben, versuchs einfach mal und schreib was nicht klappt .

gruß janosch
janoshnosh ist offline   Mit Zitat antworten
Alt 09-10-2006, 20:24   #6 (permalink)
Ein Alter User
 
Benutzerbild von jotti
 
Registriert seit: Mar 2004
Ort: Österreich
Beiträge: 159
aw

Hallo und Danke für den Tipp.
Zitat:
die bilder müssen geladen werden, eins nach dem andern
Ich möchte das bild 1 oder maximal bild 1 und bild 2 fertig laden und dann sofort mit dem scrollen beginnen.
Da es sich um kleine bilder handelt hoffe ich das die anderen während der Animation nachgeladen werden ._x nur +1 also müsste
eigentlich genug Zeit bleiben um die Bilder "nachzuladen".Ich möchte die Straming funktion von Flash ausnützen.
Habe im code oben noch var i und var a eingefügt.


PHP-Code:
var 1;
var 
bildanzahl=6;
var 
bilderListe = new Array();
lade();
function 
bewege() {
    for (var 
0i<bilderListe.lengthi++) {
        
bilderListe[i].onEnterFrame = function() {usw... 
Wenn ich das ganze in Flash teste wird aber nur ein Bild angezeigt.
Ist das normal oder muß ich noch was umändern?

Thx Jotti

Geändert von jotti (09-10-2006 um 20:25 Uhr)
jotti ist offline   Mit Zitat antworten
Alt 10-10-2006, 20:30   #7 (permalink)
Ein Alter User
 
Benutzerbild von jotti
 
Registriert seit: Mar 2004
Ort: Österreich
Beiträge: 159
Smile Geschafft

Endlich habe ich es geschafft!
Nach langen rumprobieren ist es mir nun geglückt.
Mein Danke geht an janoshnosh.
Hier mein feritiges script.
Ich glaube es gibt sich noch einige dinge die man verbessern kann aber es funktioniert.

PHP-Code:

var bildanzahl=6;
var 
1;
var 
speed 1;
var 
abstand =1;
var 
lez a;
laden = function () {
    if (
i<=a) {
        
_root.createEmptyMovieClip('pic'+ii);
        
_root['pic'+i].loadMovie("bilder/"+i+'.jpg'0);
        
_root.onEnterFrame = function() {
            if (
_root['pic'+i]._width>0) {
                
_root['pic'+i]._y 0;
                
_root['pic'+i]._x _root['pic'+(i-1)]._x+_root['pic'+(i-1)]._width+abstand;
                
this['pic'+i].onEnterFrame = function() {
                    
this._x this._x-speed;
                    if (
this._x<=-100) {
                        
                        
trace(this+" Mc Breite "+this._width);
                        
trace(lez);
                        
trace(_root['pic'+lez]._x);
                        
//
                        
this._x _root['pic'+lez]._x+_root['pic'+lez]._width;
                        if (
lez>=a) {
                            
lez 0;
                        }
                        
lez lez+1;
                        
trace(lez);
                        
//
                    
}
                };
                
delete _root.onEnterFrame;
                
i++;
                
laden();
            }
        };
    }
};
laden(); 
Thx und viel Spass sagt Jotti
jotti ist offline   Mit Zitat antworten
Alt 20-10-2006, 16:13   #8 (permalink)
Ein Alter User
 
Benutzerbild von jotti
 
Registriert seit: Mar 2004
Ort: Österreich
Beiträge: 159
Da hab ich mich wohl zu früh gefreut.
Wenn ich dieses teil online stelle funktioniert es nur auf meinen Rechner.
Wieso ist das so?
Ich vermute die Bilder liegen bei mir im Cache.

Was kann ich ändern damit es funktioniert??


Thx Jotti
jotti ist offline   Mit Zitat antworten
Alt 21-10-2006, 16:51   #9 (permalink)
Ein Alter User
 
Benutzerbild von jotti
 
Registriert seit: Mar 2004
Ort: Österreich
Beiträge: 159
Sauber Programieren

PHP-Code:
var bildanzahl=6
var 
1
var 
speed 1
var 
abstand =1
var 
lez a
laden = function () { 
    if (
i<=a) { 
        
_root.createEmptyMovieClip('pic'+ii); 
        
_root['pic'+i].loadMovie("bilder/"+i+'.jpg'0); 
        
_root.onEnterFrame = function() { 
            if (
_root['pic'+i]._width>0) { 
                
_root['pic'+i]._y 0
                
_root['pic'+i]._x _root['pic'+(i-1)]._x+_root['pic'+(i-1)]._width+abstand
                
this['pic'+i].onEnterFrame = function() { 
                    
this._x this._x-speed
                    
geladen _root['pic'+i].getBytesLoaded();
           
zuladen _root['pic'+i].getBytesTotal();
        if (
geladen == zuladen) {
                         
                        
trace(this+" Mc Breite "+this._width); 
                        
trace(lez); 
                        
trace(_root['pic'+lez]._x); 
                        
// 
                        
this._x _root['pic'+lez]._x+_root['pic'+lez]._width
                        if (
lez>=a) { 
                            
lez 0
                        } 
                        
lez lez+1
                        
trace(lez); 
                        
// 
                    

                }; 
                
delete _root.onEnterFrame
                
i++; 
                
laden(); 
            } 
        }; 
    } 
}; 
laden(); 
Habe folgendes ausgebessert
geladen = _root['pic'+i].getBytesLoaded();
zuladen = _root['pic'+i].getBytesTotal();
if (geladen == zuladen) {
Ist wahrscheinlich besser.

Mfg Jotti
jotti ist offline   Mit Zitat antworten
Alt 16-11-2006, 20:24   #10 (permalink)
Ein Alter User
 
Benutzerbild von jotti
 
Registriert seit: Mar 2004
Ort: Österreich
Beiträge: 159
AW janoshnosh

Hallo!

Ich habe mich nun janoshnosh Tipp angehängt da es anscheinend nicht anders Funktioniert.
Nun habe ich versucht eine Ladeanzeige zu integrieren.
Wieso wird immer gleich 100% angezeigt?
Wenn ich den Film in Flash Teste dann funktioniert die Ladeanzeige.
Wenn ich den Film hochlade funktionier das ganze leider nicht mehr.
Hat wer eine Ahnung ?

PHP-Code:
var bildanzahl=45;
var 
1;
var 
speed 2;
var 
abstand 0;
var 
bilderListe = new Array();
laden();
// Laden
function laden() {
    if (
i<=a) {
        var 
bild this.createEmptyMovieClip('pic'+ii);
        
bild.loadMovie(""+i+'.jpg'0);
        
bilderListe.push(bild);
        
bild._alpha 00;
        
trace(bild);
        
this.loader.onEnterFrame = function() {
            
// Geladene und zu ladenede Bytetes abfragen
            
geladen bild.getBytesLoaded();
            
zuladen bild.getBytesTotal();
            
// Sicherheitsabfrage, da ein leerer MC so ungefähr
            // 4 bis 5 Bytes hat und zu Verfälschungen führen könnte
            
if (geladen>=10) {
                
trace(bild+"Größer als 10 "+geladen);
                
// Ladeanzeige sichtbar machen
                
this.loader._visible true;
                
// Berechnung der bereits geladenen Prozent
                
prozent Math.round(geladen/zuladen*100);
                
// Ausgabe im dynamischen Textfeld "prozentanzeige"
                
this.prozentanzeige.text prozent+" Prozent geladen";
                
// Skalierung des Balkens anhand der Prozentzahl
                
this.balken._xscale prozent;
                
// Wenn komplett geladen
                
ausgabe.text "Bild "+i+" von "+a
                
if (prozent>=100) {
                    
// den EnterFrame-Event löschen um Performance zu sparen
                    // die Ladeanzeige wieder unsichtbar machen
                    
this.loader._visible false;
                    
delete this.onEnterFrame;
                    
i++;
                    
laden();
                }
            }
        };
    } else {
        
trace("Alle Bilder geladen.");
        
positioniere();
    }
}
function 
positioniere() {
    
trace("Positionieren");
    
trace(bilderListe[0]);
    
bilderListe[0]._x 0;
    
bilderListe[0]._alpha 100;
    
bilderListe[0].vorgaenger bilderListe[bilderListe.length-1];
    for (var 
1i<bilderListe.lengthi++) {
        var 
bild bilderListe[i];
        
bild._alpha 100;
        var 
vorgaenger bilderListe[i-1];
        
bild._x vorgaenger._x+vorgaenger._width+abstand;
        
bild.vorgaenger vorgaenger;
    }
    
trace("Bilder sind in Position.");
    
bewege();
}
function 
bewege() {
    
trace("Bewegen");
    for (var 
0i<bilderListe.lengthi++) {
        
bilderListe[i].onEnterFrame = function() {
            
this._x -= speed;
            if (
this._x<=-(500)) {
                
this._x this.vorgaenger._x+this.vorgaenger._width+abstand;
            }
        };
    }

Thx Jotti
jotti 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 19:19 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele