Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-06-2004, 12:46   #1 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
onRelease=function() für dyn. geladenes Bild

Moin,

last but not least…

Ich lade ein Bild dynamisch in einen Container, dessen Pfad ich vorher mittels eines LoadVars Objektes aus MySQL via PHP geladen habe.
Das Laden des Bildes funktioniert auch wunderbar. Nun möchte ich dem Bild, respektive dem Container dessen, eine Funktion auf dem onRelease Handler mitgeben.

Das Script sieht so aus:

PHP-Code:
//Actionscript 1.0
var ContComp=_root.elements.level5.attachMovie('content''content'1);ContComp.image_max=this.image_max;            ContComp.image.loadMovie(this.image1);
ContComp.image.onRelease=function()            
{                                                
getURL("javascript:popup('"+this.image_max+"');");

So funktioniert das nur leider nicht. Als Workaround habe ich bisher die Function auf den ContComp gelegt, was allerdings sehr ungünstig ist, das man den dort enthaltenen Text etc. anklicken kann.

Ich nehme an, die onRelease=function() funktioniert nicht, da zur Zeit der Definition des onReleaseHandlers und der Funktion der Container noch leer ist bzw. eine Größe von _x=0, _y=0 hat.

Abhelfen würde nun ein .jpg Preloader. Also ein Preloader für loadMovie();.

Ich habe im Forum schon gesucht… irgendwie kann man .jpg nicht mit getBytesLoaded() & co ansprechen, oder?
Und ein extra loadVars() Objekt hilft anscheinend auch nicht…

Wer weiß weiter?

Liebe Grüße

Yves
  Mit Zitat antworten
Alt 26-06-2004, 13:09   #2 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
die getBytesLoaded() und getBytesTotal() kannste schon anwenden jedoch nur auf den containerMc

PHP-Code:
this.createEmptyMovieClip("contMc"10);
this.contMc.loadMovie("mein.jpg");
this.contMc.onEnterFrame=function(){
if(
this.getBytesLoaded()==this.getBytesTotal() && this.getBytesLoaded()>4){
trace("alles geladen");
delete this.onEnterFrame;
}

das ganze scheinst du auch noch innerhalb des scopes von dem LoadVars object zu machen, oder???
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 26-06-2004, 13:21   #3 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi,

ersteinmal vielen Dank für deine Antwort.

Auf deine Frage poste ich dir doch einfach mal mein Script… ist schon ein Batzen an Code, weil der Kunde 3 Ebenen Navigation, Bilderserien usw. selbst per CMS definieren kann… die Clips die attached werden sind einfache MovieClips mit entsprechenden Component Definitions.

PHP-Code:
//Actionscript1
MovieClip.prototype.workProjectsSelect=function(firstGroup,secondGroup,thirdGroup,level_id,sequence_a,sequence_b,sequence_c,sequence_d,sequence_e,sequence_f,sequence_g,sequence_h,sequence_i,sequence_j)
    {
    
attachMovie("MacOs""MacOs_instance",1)
    
MacOs_instance.startDrag(true);
    
Mouse.hide();
    
_root.varChar('''');
    var 
firstGroup=new itemOwnerGroup();
    
_root.elements.createEmptyMovieClip('level2',1);
    var 
sender=new LoadVars()
    
sender.object=this;
    
sender.root_id=_global.key_id-level_id;    
    
sender.sendAndLoad('query.php'sender'POST');
    
sender.onLoad=function(success)
        {
        if (
success)
            {
            var 
base_y=-65;
            var 
base_x=-465;        
            for (var 
i=0i<this.repeatsi++)
                {            
                var 
CompClip=itemOwnerClass.createSymbol(_root.elements.level2'level2_'+iifirstGroup);                
                
CompClip.id=eval('this.id_'+i);
                
CompClip.name=eval('this.name_'+i);
                
CompClip.field_name.text=eval('this.name_'+i);
                
CompClip._x=base_x;
                
CompClip._y=base_y+(i*20);
                
CompClip.onRelease=function()
                    {
                    
attachMovie("MacOs""MacOs_instance",1)
                    
MacOs_instance.startDrag(true);
                    
Mouse.hide();
                    
this.group.switchSelection(this);
                    
_root.varChar(this.namethis.date);
                    var 
secondGroup=new itemOwnerGroup();
                    
_root.elements.createEmptyMovieClip('level3',2);                    
                    var 
sender2nd=new LoadVars()
                    
sender2nd.object=this;
                    
sender2nd.root_id=this.id;    
                    
sender2nd.sendAndLoad('query.php'sender2nd'POST');
                    
sender2nd.onLoad=function(success)
                        {
                        if (
success)
                            {
                            for(var 
j=0j<this.repeatsj++)
                                {                        
                                var 
CompClip2=itemOwnerClass.createSymbol(_root.elements.level3'level3_'+jjsecondGroup);
                                
CompClip2.id=eval('this.id_'+j);
                                
CompClip2.date=eval('this.date_'+j);
                                
CompClip2.name=eval('this.name_'+j);
                                
CompClip2.field_name.text=eval('this.name_'+j);
                                
CompClip2._x=base_x+133;
                                
CompClip2._y=base_y+(j*20);
                                
CompClip2.onRelease=function()
                                    {
                                    
attachMovie("MacOs""MacOs_instance",1)
                                    
MacOs_instance.startDrag(true);
                                    
Mouse.hide();
                                    
this.group.switchSelection(this);
                                    
_root.varChar(this.namethis.date);
                                    var 
thirdGroup=new itemOwnerGroup();
                                    
_root.elements.createEmptyMovieClip('level4',3);
                                    var 
sender3rd=new LoadVars()
                                    
sender3rd.object=this;
                                    
sender3rd.root_id=this.id;
                                    
sender3rd.sendAndLoad('query.php'sender3rd'POST');
                                    
sender3rd.onLoad=function(success)
                                        {
                                        if (
success)
                                            {
                                            var 
level4_x=-200;
                                            var 
level4_y=297;
                                            for(var 
k=0;k<this.repeats;k++)
                                                {
                                                var 
CompClip3=itemOwnerClass.createSymbol(_root.elements.level4'level4_'+kkthirdGroup);
                                                
CompClip3.id=eval('this.id_'+k);
                                                
CompClip3.root_id=eval('this.root_id_'+k);
                                                
CompClip3.date=eval('this.date_'+k);
                                                
CompClip3.name=eval('this.name_'+k);
                                                if(
k<9)
                                                    {
                                                    
CompClip3.field_name.text='0'+[k+1];
                                                    }
                                                else
                                                    {
                                                    
CompClip3.field_name.text=k+1;
                                                    }
                                                
CompClip3.image=eval('this.image_'+k);
                                                
CompClip3.image_max=eval('this.image_max_'+k);
                                                
CompClip3.txt=eval('this.text_'+k);
                                                
CompClip3._x=level4_x+(18*k);
                                                
CompClip3._y=level4_y;
                                                
CompClip3.onRelease=function()
                                                    {
                                                    
attachMovie("MacOs""MacOs_instance",1)
                                                    
MacOs_instance.startDrag(true);
                                                    
Mouse.hide();
                                                    
this.group.switchSelection(this);
                                                    
_root.varChar(this.namethis.date);
                                                    
_root.elements.createEmptyMovieClip('level5',4);
                                                    var 
ContComp=_root.elements.level5.attachMovie('content''content'1);                                                
                                                    
ContComp.name_field.text=this.name;
                                                    
ContComp.image_max=this.image_max                                                                                                           
                                                    ContComp
.txt_field.text=this.txt;
                                                    
ContComp.txt_field.autoSize=true;
                                                    
ContComp.image.loadMovie(this.image1);
                                                    
ContComp.onRelease=function()
                                                        {
                                                        
getURL("javascript:popup('"+this.image_max+"');");
                                                        }
                                                    
_root.elements.content.createEmptyMovieClip('ScrollFrame',1);
                                                    var 
Scrollpane=_root.elements.content.ScrollFrame.attachMovie('FScrollPaneSymbol','ScrollPane',1);
                                                    
Scrollpane.setSize(425374);
                                                    
Scrollpane._x=-44;
                                                    
Scrollpane._y=-206;
                                                    
Scrollpane.setScrollContent(ContComp);
                                                    
Scrollpane.setVScroll=true;
                                                    
Scrollpane.setHScroll=false;
                                                    
ContComp._x=-190;
                                                    
MacOs_instance.stopDrag();
                                                    
MacOs_instance.removeMovieClip();
                                                    
Mouse.show();
                                                    }                                            
                                                }
                                            
MacOs_instance.stopDrag();
                                            
MacOs_instance.removeMovieClip();
                                            
Mouse.show();
                                            
_root.elements.level4.level4_0.onRelease();
                                            
delete this.object['sender3rd'];
                                            }
                                        }                                
                                    }
                                }
                            
MacOs_instance.stopDrag();
                            
MacOs_instance.removeMovieClip();
                            
Mouse.show();
                            
delete this.object['sender2nd'];
                            }                        
                        }
                    }
                
MacOs_instance.stopDrag();
                
MacOs_instance.removeMovieClip();
                
Mouse.show();
                
delete this.object['sender'];                
                }    
            }
        }
    } 

Liebe Grüße

Yves
  Mit Zitat antworten
Alt 26-06-2004, 13:24   #4 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Zitat:
Zitat von atothek
PHP-Code:
//…
&& this.getBytesLoaded()>4
//… 
Warum >4? Gibt es da etwas zu berücksichtigen?

Liebe Grüße

Yves
  Mit Zitat antworten
Alt 26-06-2004, 13:35   #5 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Ich hab das mal eingebaut…

müsste so korrekt sein, oder?

PHP-Code:
//Actionscript 1.0
var ContComp=_root.elements.level5.attachMovie('content''content'1);                                                ContComp.image_max=this.image_max            ContComp.image.loadMovie(this.image1);
ContComp.image.onEnterFrame=function()
{
if(
this.getBytesLoaded()==this.getBytesTotal() && this.getBytesLoaded()>4)
{                                            
this.onRelease=function()
{
getURL("javascript:popup('"+this.image_max+"');");
}
delete this.onEnterFrame;
}


Liebe Grüße

Yves
  Mit Zitat antworten
Alt 26-06-2004, 13:48   #6 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
1. ne ganz schön langer script
2. >4 bewirkt das im falle von this.getBytesLoaded()==this.getBytesTotal()
und beide den wert 0 haben das kann im ersten zyklus mal der fall sein nicht davon ausgegangen wird das der clip komplett geladen ist
3. deine implementierung ist an sich korrekt.

doch so beim schnellen rüberschauen über dein script sind mir einige eher unschöne kameraden über den weg gelaufen wie zB.

PHP-Code:
 CompClip3.image_max=eval('this.image_max_'+k); 
eval ist nicht so toll ich würde es alles umschreiben und zwar so

PHP-Code:
 CompClip3.image_max=this["image_max_"+k]; 
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 26-06-2004, 13:51   #7 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Was ist an eval() auszusetzen?

Unnötige Rechenzeit für die Funktion?

Liebe Grüße

Yves
  Mit Zitat antworten
Alt 26-06-2004, 14:19   #8 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
es ist einfach überholt nicht mehr zeitgemäß. eval kann zB. auch nur auf der linken seite eines = vorkommen

zB.

eval("meineVar")=eval(meinWert);
geht nicht
hingegen

this["meineVar"]=this[meinWert];
widerum geht

es ist eine einheitlichere schreibweiße.
ich bin der auffassung das man die änderungen von flash die sinn machen auch mitmacht
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 26-06-2004, 15:40   #9 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Zitat:
Zitat von atothek
ich bin der auffassung das man die änderungen von flash die sinn machen auch mitmacht
Da gebe ich dir definitiv Recht und werde sämtliche Script heute nachmittag umschreiben!

Besten Dank und viele Grüße aus Dortmund


Yves
  Mit Zitat antworten
Alt 26-06-2004, 17:16   #10 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Ich hätte da mal ne frage!!
Wieso sollte man für "attachMovie" einen Loader brauchen
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 26-06-2004, 17:22   #11 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Mit attachMovie() wird ein Clip, der aus Textfeldern und leeren MCs besteht, auf der Bühne instanziert. Dafür brauche ich natürlich keinen Loader. Nun ist in dem attached Clip ein Container, in den ich ein Bild dynamisch lade.
Da ich wie o.g. nicht das Bild mit getBytesLoaded(); ansprechen kann, tue ich das dann mit dem Container, in den das Bild geladen wird.

Alles klar?


Liebe Grüße

Yves
  Mit Zitat antworten
Alt 26-06-2004, 17:52   #12 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Axo!
Hab mir des ganze script nicht durchgesehen, nix für ungut
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 26-06-2004, 18:10   #13 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi,

leider funktioniert diese Methode aber nicht… ich glaube, das selbst der onEnterFrame Handler für Image nicht definiert werden kann, solange des Head nicht geladen ist…

Wenn ich den Handler direkt für den Clip der attached wird setze und auf den „Preloader“ verzichte, geht es.

PHP-Code:
var ContComp=_root.elements.level5.attachMovie('content''content'1);ContComp.image_max=this.image_max;        
ContComp.image.loadMovie(this.image1);
ContComp.onEnterFrame=function()
    {
    
ContComp.image.onRelease=function()
        {
        
getURL("javascript:popup('"+ContComp.image_max+"');");
        }
      } 
Mal rein interessehalber… ist es schlimm, wenn ich auf den Preloader verzichte und den onEnterFrame Handler somit nicht lösche? Geht das sehr auf die Perfomance?

Und noch etwa…

Wenn ich das dann relativ schreiben möchte, also so…

PHP-Code:
ContComp.onEnterFrame=function()
    {
    
this.image.onRelease=function()
        {
        
getURL("javascript:popup('"+_parent.image_max+"');");
        }
    } 
wie definiere ich dann die Variable

ContComp.image_max relativ?

So scheint es nicht zu gehen:

PHP-Code:
ContComp.onEnterFrame=function()
    {
    
this.image.onRelease=function()
        {
        
getURL("javascript:popup('"+ContComp.image_max+"');");
        }
    } 
  Mit Zitat antworten
Alt 26-06-2004, 18:19   #14 (permalink)
409coffeemaker
Gast
 
Beiträge: n/a
Hi,

nach einigen Tests habe ich herausgefunden, das alles geht, wenn man die onEnterFrame Function nicht deleted.

So geht es also:

PHP-Code:
ContComp.image.loadMovie(this.image1);
ContComp.onEnterFrame=function()
    {
    if(
this.image.getBytesLoaded()==this.image.getBytesTotal() && this.image.getBytesLoaded()>4)
        {
        
this.image.onRelease=function()
            {
            
getURL("javascript:popup('"+ContComp.image_max+"');");
            }
        }
    } 
Meine Frage bleibt jetzt, wie ich ContComp.image_max noch relativ definiere, und was passiert, wenn ich die onEnterFrame Func nicht lösche…

Weiß jemand warum das delete() der Funktion Probleme macht? Wird vielleicht dabei dann auch der onRelease Hanlder gelöscht?

Liebe Grüße

Yves
  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 23:56 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele