Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-08-2006, 09:41   #1 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 56
Question return image._width

moin!

um die breite einer in loadmovie geladenen grafik herauszubekommen muss ich ja erstmal sichergehen, dass die grafik fertig geladen wurde. das hab ich in folgender funktion getan:

PHP-Code:
function check_load_stat (toCheck:MovieClip){
    var 
checker:MovieClip mc.createEmptyMovieClip("MC_checker",mc.getNextHighestDepth()); 
        
checker.toLoadimage
        
checker.onEnterFrame = function() { 
            if (
this.toLoad.getBytesLoaded()>=4) { 
                
this.toLoad.getBytesLoaded(); 
                   
this.toLoad.getBytesTotal(); 
                
Math.ceil((l/t)*100); 
                if (
p>=100) { 
                    
delete this.onEnterFrame
                       
toCheck.onRelease=function(){
                        ...
                    }
                    
                } 
            }
        }


jetzt meine frage: wie kann ich die breite wieder an das ursprüngliche script zurück geben. irgendwas mit return oder wie ? und wie muss ich die funktion dafür aufrufen ?


danke schonmal.

gruß
roox ist offline   Mit Zitat antworten
Alt 30-08-2006, 13:21   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Wie meinst du das? Gib mal ein Beispiel.
  Mit Zitat antworten
Alt 30-08-2006, 15:20   #3 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 56
na normal lädste n bild beispielsweise mit

PHP-Code:
loadmovie ("hallo.jpg",  "image"); 

die breite von nem film kannst mit

PHP-Code:
trace (image._width
ausgeben. aber wenn du vorher keine abfrage machst um sicher zu gehn, dass der film fertig geladen is wird grundsätzlich der wert 0 zurück gegeben. das gleiche mit onRelease. du musst erst prüfen, ob der film fertig geladen ist, dann kannst ne onRelease funktion schreiben (siehe oben)

aber wie geb ich aus der funktion die breite des films zurück?

is wichtig, da ich eine art filmstreifen mit vielen bildern machen will die direkt aneinander anknüpfen
roox ist offline   Mit Zitat antworten
Alt 30-08-2006, 16:05   #4 (permalink)
angry > always
 
Benutzerbild von ingohill
 
Registriert seit: Jul 2001
Ort: NRW
Beiträge: 1.635
in dem fall:
da bilder nie gleich schnell geladen werden, entweder thumbnails benutzen gleicher größe benutzen, oder je nach ladereihenfolge sichtbar machen und an das letztes element anschliessen.
oder xml, welches gleich die reihenfolge der bilder vorgibt und neben daten wie kommentar etc auch die maße des bildes enthält.

wenn du einen rückgabewert willst, brauchst du dann selbstverständlich einen listener, der die information(en) verarbeitet.

-ingo
__________________

on air: caliban | neaera | heaven shall burn | hatebreed | the agony scene
ingohill ist offline   Mit Zitat antworten
Alt 30-08-2006, 16:42   #5 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
aber wie geb ich aus der funktion die breite des films zurück?
Da gibt es mehrere mögliche Vorgehensweisen: da ein Preloader den "normalen" Ablauf des Programms solange unterbricht, bis ein Film nachgeladen ist, kannst du bspw. vom Preloader aus alle weiteren Funktionen starten. Dann wäre der "natürliche" Datenfluss gewährleistet, wobei du die Breite des geladenen Films bspw. in einer Zeitleistenvariablen oder einer globalen Variablen merken könntest.

Die andere - nicht ganz so schöne - Variante wäre, einen zusätzlichen onEnterFrame-Event solangen "rotieren" zu lassen, bis die gewünschte Variable einen Zustand ungleich undefined angenommen hat und dann im Programm fortzufahren.
  Mit Zitat antworten
Alt 30-08-2006, 18:16   #6 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 56
naja, ich arbeite bisher so gar nicht mit der zeitleiste, rein mit as und mir wärs echt am liebsten wenn ich irgendwie aus der o.g. funktion ne art globale variable deklarieren könnte, die mir die breite ausgibt (hab an den bereich über dem .onRelease gedacht)
roox ist offline   Mit Zitat antworten
Alt 30-08-2006, 20:27   #7 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 56
dringende hilfe gesucht

also damit klarer wird was passieren soll:

PHP-Code:
//nur für die tween komponente nötig
import mx.transitions.Tween;
import mx.transitions.easeNone.*;

//mein testarray indem die adressen der bilder drin sind (bsp.: 0.jpg)
var main_link = Array ()
    
main_link.push ("0""1""2")



//die funktion zum überprüfen des ladestands. mein großes problem!!!

function check_load_stat (toCheck:MovieCliptarget:String){
    var 
checker:MovieClip mc.createEmptyMovieClip("MC_checker",mc.getNextHighestDepth()); 
        
checker.toLoadimage
        
checker.onEnterFrame = function() { 
            if (
this.toLoad.getBytesLoaded()>=4) { 
                
this.toLoad.getBytesLoaded(); 
                   
this.toLoad.getBytesTotal(); 
                
Math.ceil((l/t)*100); 
                if (
p>=100) { 
                    
delete this.onEnterFrame
                               
toCheck.onRelease=function(){
                        
trace(image._width);
                    }
                }
            }
        }
}


//n zufallsgenerator den ich brauche, damit die bilder zufällig gewählt werden, immer das gleiche is ja langweilig

function randRange(min:Numbermax:Number):Number {
    var 
randomNum:Number Math.floor(Math.random() * (max min 1)) + min;
    return 
randomNum;
}

//funktion für das hintergrundbild/die maske
function drawRectangle(target_mc:MovieClipboxWidth:NumberboxHeight:NumberfillColor:NumberfillAlpha:Number):Void {
    
with (target_mc) {
        
beginFill(fillColorfillAlpha);
        
moveTo(00);
        
lineTo(boxWidth0);
        
lineTo(boxWidthboxHeight);
        
lineTo(0boxHeight);
        
lineTo(00);
        
endFill();
    }
}

//maskenebene
this.createEmptyMovieClip("mask_mc"this.getNextHighestDepth());
    
drawRectangle(mask_mc8353300xFFFFFF88);

//hintergrundebene
this.createEmptyMovieClip("background_mc"this.getNextHighestDepth());
    
drawRectangle(background_mc8353300xFFFFFF88);

//aufruf des Zufallsgenerators zum generiern der bilder. alles noch testphase
zahl1 main_link[randRange(0,main_link.length-1)];
zahl2 main_link[randRange(0,main_link.length-1)];

//hauptfilm
var mc:MovieClip this.createEmptyMovieClip("mc"this.getNextHighestDepth());

//unterfilm 1, dessen breite bestimmt werden soll
var image:MovieClip=mc.createEmptyMovieClip("image",mc.getNextHighestDepth());
    
image.loadMovie("pics/"+zahl1+".jpg");
    
image._x=200
    check_load_stat 
(image"test");

var 
image2:MovieClip=mc.createEmptyMovieClip("image2",mc.getNextHighestDepth());
    
image2.loadMovie("pics/"+zahl2+".jpg");
    
image2._x=140//sollte am besten image2._x=image._width sein, aber da das 0 ist hab ichs erstma so gelassen

//nur ne maske, damit der schwenkbereich begrenzt is
mc.setMask(mask_mc);


//der slider
var box_tween:Tween = new Tween(mc"_x"Regular.easeNoneStage.width*-1010true);
box_tween.onMotionFinished = function() {
     
box_tween.yoyo();
}; 


was passieren soll:

es soll ein langer endlosfilm werden, der hin und her schwingt und bilder anzeigt, auf die zum beispiel geklickt werden kann. da die bilder aber nahtlos aneinander liegen sollen aber unterschiedlich breit sind, brauch ich die breite des vorigen bildes. nix anderes. in der funktion "check_load_stat" wird geprüft ob der film fertig geladen is und ggf n link draus gemacht. aber die breite des bildes bekomm ich trotzdem nicht global in den film rein

Geändert von roox (30-08-2006 um 20:31 Uhr)
roox ist offline   Mit Zitat antworten
Alt 30-08-2006, 23:40   #8 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
naja, ich arbeite bisher so gar nicht mit der zeitleiste
Du arbeitest immer mit der Zeitleiste, auch wenn du per AS scriptest. Alle Elemente in einem Flashfilm liegen auf einer Zeitleiste, MCs haben sogar eigene Zeitleisten.

Mit Zeitleistenvariablen meinte ich so etwas wie _level0.meineVariable oder _root.meineAndereVariable, also keine lokalen Variablen...
  Mit Zitat antworten
Alt 31-08-2006, 10:03   #9 (permalink)
Neuer User
 
Registriert seit: May 2006
Beiträge: 56
also wenn ne _root.blubb variable ins spiel kommt. dachte ich bisher, dass das globale sind.

aber wie auch immer. hilft mir grad bei meinem problem nich weiter
roox ist offline   Mit Zitat antworten
Alt 31-08-2006, 13:33   #10 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
aber die breite des bildes bekomm ich trotzdem nicht global in den film rein
Du hast da eine etwas sehr umständliche Form eines Preloaders gewählt. Ich würde das etwas vereinfachen, z.B.:
PHP-Code:
var image:MovieClip=mc.createEmptyMovieClip("image",mc.getNextHighestDepth());
image.loadMovie("pics/"+zahl1+".jpg");
image._x=200


this
.onEnterFrame = function(){//kontinuierlich überprüfen, ob das Laden beendet ist
    
var prozent int(_level0.image.getBytesLoaded()*100/_level0.image.getBytesTotal());//Prozentwert errechnen
    
if(prozent >= 100 && _level0.image._width && _level0.image._height>0) {//wenn alles geladen wurde und der Containerfilm eine Breite und Höhe hat...
        
delete this.onEnterFrame;//dann den jetzt überflüssigen Event löschen
        //und hier die Breite des MCs merken:
               
_global.bildbreite _level0.image.width;
               
//dann erst das Script fortsetzen
               
_level0.folgefunktion();
    }
}
function 
folgefunction(){
   
//hier erst ist die Breite des MCs bekannt!

Aber beim Nachladen mehrerer Bilder solltest du sowieso besser auf die MovieClipLoader-Klasse ausweichen...
  Mit Zitat antworten
Alt 05-09-2006, 18:23   #11 (permalink)
Yi|
Animatöse
 
Registriert seit: Oct 2005
Ort: Berlin
Beiträge: 11
Hi
Ich hab das mal auf meine Wünsche angepasst aber leider funktioniert das nicht so richtig. braucht man flash 8 ?
Das ding ist ich möchte einen Rahmen um das geladen bild setzen, der rahmen ist schon vorhanden in der lib. Wird später aber auch dynamisch geladen...
Immoent wird das bild zwar angezeigt aber der rahmen nicht verändert...
die funktion läuft nicht an scheinbar
Bin für jede hilfe dankbar
PHP-Code:
var image:MovieClip=mc.createEmptyMovieClip("image",1);
image.loadMovie("flyer.jpg");



this.onEnterFrame = function(){
    var 
prozent int(_level0.image.getBytesLoaded()*100/_level0.image.getBytesTotal());
    if(
prozent >= 100 && _level0.image._width && _level0.image._height>0) {
        
delete this.onEnterFrame;
              
_global.breite _level0.image.width;
               
_global.hoehe _level0.image.height;
               
_level0.folgefunktion();
    }
}
function 
folgefunction(){
  
rahmen.width _global.bildbreite
  rahmen
.height _global.hoehe
}
rahmen.swapDepths(2); 

gruß yi
Yi| ist offline   Mit Zitat antworten
Alt 05-09-2006, 21:55   #12 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
rahmen.width = _global.bildbreite
Versuch mal _level0.rahmen._width = _global.bildbreite;
  Mit Zitat antworten
Alt 07-09-2006, 21:55   #13 (permalink)
Yi|
Animatöse
 
Registriert seit: Oct 2005
Ort: Berlin
Beiträge: 11
hi
hats leider nich gebracht
weiß jemand was?
ansonsten muss ich ja noch ein neuen thread aufmachen *droh*... hatte nämlich auch noch nichts gefunden dazu ..
gruß
edit: um nochmal kurz auf mein eigentliches vorhaben zurückzukommen, möcht ich wie man sieht eigentlich nur die height und widht werte eines dynamisch geladen bildes auslesen und auf einen anderen mc [rahmen] anwenden ...

Geändert von Yi| (07-09-2006 um 22:03 Uhr)
Yi| ist offline   Mit Zitat antworten
Alt 07-09-2006, 22:08   #14 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Nee, der Fehler lag doch woanders. Schau dir mal den Namen an, mit dem du die Funktion aufrufst und dann den Funktionsnamen selbst:
Zitat:
_level0.folgefunktion();

function folgefunction(){
Fällt dir etwas auf?
  Mit Zitat antworten
Alt 07-09-2006, 22:47   #15 (permalink)
Yi|
Animatöse
 
Registriert seit: Oct 2005
Ort: Berlin
Beiträge: 11
ooooooohman is das gemein!
vor lauter .. ifs und gotos und vars nich mal mehr ein schreibfehler wahrgenommen ...vielen dank!

das rettet mir den abend
Yi| 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 03:19 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele