Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-08-2005, 10:17   #1 (permalink)
variuse
 
Benutzerbild von SaKiN
 
Registriert seit: Mar 2004
Ort: Berlin
Beiträge: 117
Bilder dynamisch laden und Größe anpassen

Hi,

der Thread-Titel beschreibt meine Frage eigentlich schon ganz gut, wie kann ich in ActionScript jpg-Bilder in einen MovieClip reinladen und dann deren Größe automatisch auf die Größe des MovieClips skalieren?

ActionScript:
  1. createEmptyMovieClip("container_mc",1);
  2. container_mc.loadMovie("meinBild.jpg");
  3.  
  4. container_mc._height = container_mc._width = 150;

War jetzt mein Versuch, funktioniert leider nicht so doll...


Danke für die Tips!
__________________
variuse | xing.com
SaKiN ist offline   Mit Zitat antworten
Alt 26-08-2005, 10:29   #2 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
Also ...

ein MC den du mit createEmptyMovieClip erstellt hast hat erstmal width/height = 0.

Du lädst jetzt ein Bild in den container und versuchst sofort (laut deinem Script unten) die höhe des containers zu verändern ... das kann lokal mit etwas glück klappen wird aber in 99% aller fälle danebengehen weil du nicht checkst ob das bild wirklich komplett geladen ist.

Nur wenn das Bild komplett geladen ist übernimmt der container die width/height werte des bildes und du kannst die werte abfragen und ändern.

Du musst also noch eine preloader einbauen.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 26-08-2005, 13:04   #3 (permalink)
variuse
 
Benutzerbild von SaKiN
 
Registriert seit: Mar 2004
Ort: Berlin
Beiträge: 117
...

Thanks... nur bräuchte ich irgendwie ne Funktion, die mir das Bild einlädt, seine Größe feststellt und es eben dann auf einen MovieClip container_mc skaliert.

Dabei soll eben die Bildgröße theoretisch egal sein. Das Problem is irgendwie dass ich mir die absolute Größe nicht ausgeben kann so:

ActionScript:
  1. box_mc.createEmptyMovieClip("container_mc", 1);
  2.  
  3. with(box_mc)
  4. {
  5.     container_mc.loadMovie("img1.jpg");
  6.    
  7.     trace(container_mc._xscale); // Gibt korrekte Ausgabe: 100
  8.              trace(container_mc._width)// Gibt immer 0, egal ob Bild geladen oder nicht
  9. }

Wenn ich _xscale verändere wird, das Bild korrekt skaliert. Also sieht es für mich so aus, als ob das geladene Bild irgendwie nicht in die absolute Größe des Bildes mit eingerechnet wird...

Mein Problem wäre komplett gelöst, wenn ich die Bildgröße von einem dynamisch-geladenen Bild ins Actionscript bekomme, daraus kann ich mir ja dann den Rest berechnen lassen...
__________________
variuse | xing.com

Geändert von SaKiN (26-08-2005 um 13:07 Uhr)
SaKiN ist offline   Mit Zitat antworten
Alt 26-08-2005, 13:10   #4 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Dazu musst du mit einer onEnterFRame-Funktion die geladenen Bytes überprüfen ( oder die grösse eines leeren mc's --> ist immer 0 ) ist der Inhalt vollständig geladen oder die größe des mc's größer 0 dann kannst du erst die grösse der Bilder abfragen.
Damit der user das Bild aber dann noch nicht sieht setzt du es einfach unsichtbar.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 29-08-2005, 15:56   #5 (permalink)
variuse
 
Benutzerbild von SaKiN
 
Registriert seit: Mar 2004
Ort: Berlin
Beiträge: 117
...

Wäre schön wenn das klappen würde... du meintest so:

ActionScript:
  1. box_mc.createEmptyMovieClip("container_mc", 1);
  2.  
  3. box_mc.container_mc.loadMovie("test.jpg");
  4.  
  5. box_mc.container_mc.onEnterFrame = function()
  6. {
  7.     if(this.getBytesLoaded() < this.getBytesTotal())
  8.     {
  9.         trace(this.getBytesLoaded());
  10.     }
  11.     else
  12.     {
  13.         trace(this.getBytesTotal());
  14.         trace("Image Size is: "+this._width+" x "+this._height);
  15.         delete this.onEnterFrame;
  16.     }
  17. }

Geht leider nicht... Ausgabe : 0, Image Size is: 0 x 0

Eine Abfrage über getBytesLoaded usw. geht beim Bildladen anscheinend nicht? Jemand vielleicht noch ne andere Idee?? So langsam wirds dringend :-(
__________________
variuse | xing.com
SaKiN ist offline   Mit Zitat antworten
Alt 29-08-2005, 16:15   #6 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hi!
Kann nicht klappen. Du kannst den onEnterFrame nicht auf den MC legen, der nachläd:
ActionScript:
  1. box_mc.createEmptyMovieClip("container_mc", 1);
  2. box_mc.createEmptyMovieClip("watcher_mc", 2);
  3. box_mc.container_mc.loadMovie("test.jpg");
  4. box_mc.watcher_mc.onEnterFrame = function() {
  5.     var mc = this._parent.container_mc;
  6.     if (mc._width>0) {
  7.         trace(mc.getBytesTotal());
  8.         trace("Image Size is: "+mc._width+" x "+mc._height);
  9.         removeMovieClip(this);
  10.     } else {
  11.         trace(mc.getBytesLoaded());
  12.     }
  13. };
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 29-08-2005, 16:25   #7 (permalink)
"Lust auf Stil"
 
Benutzerbild von questionner
 
Registriert seit: Jun 2003
Ort: Florenz
Beiträge: 1.490
Zitat:
Eine Abfrage über getBytesLoaded usw. geht beim Bildladen anscheinend nicht?
Guter Witz.
Bilder vorladen geht immer, und auch die Werte verändern:
ActionScript:
  1. this.createEmptyMovieClip("container_mc", 1);
  2.       loadMovie("dasBild.jpg", "container_mc");
  3.       container_mc._alpha = 0;
  4.       this.onEnterFrame = function () {
  5.         total = container_mc_mc.getBytesTotal();
  6.         geladen = container_mc_mc.getBytesLoaded();
  7.         prozent = Math.round((geladen / total) * 100);
  8.         preloader_txt.text = ':: Loading....' + prozent + '%';
  9.         if (geladen >= total && geladen > 4) {
  10.           delete this.onEnterFrame;
  11.           container_mc._width = einWert; //siehe unten
  12. container_mc._height = einWert;
  13.          container_mc._alpha = 100;
  14.         }
  15.       }
"einWert" kannst Du mit allem Möglichen ersetzen. Auch mit getraceten Werten. Nur musst Du etwas zum tracen haben. Wenn Dein Container leer ist, was er ist, da per AS generiert, nimmt er die Ausmaße des geladenen Bildes an. Was soll den die automatische Größenanpassung für ein Wert als Variable sein? Größe vom box_mc?
__________________
Dann geht ein Bild hinein, geht durch der Glieder angespannter Stille - und hört im Herzen auf zu sein.
questionner ist offline   Mit Zitat antworten
Alt 30-08-2005, 09:19   #8 (permalink)
variuse
 
Benutzerbild von SaKiN
 
Registriert seit: Mar 2004
Ort: Berlin
Beiträge: 117
Thx

Hi,

Danke an "Der Frager"... funktioniert gut. Ich hatte vorher genau das gleiche getestet, nur dass ich den watcher_mc im _root erstellt hab, ging erstaunlicherweise nicht, Ausgabe 0x0...

Aber so klappts, danke!
__________________
variuse | xing.com
SaKiN ist offline   Mit Zitat antworten
Alt 16-05-2006, 00:41   #9 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 67
@Der Frager

Hallöchen "SaKin" und "Der Frager",
hab hier im grunde das selbe Problem wie SaKin, jedoch funktioniert die Lösung von "Der Frager" bei mir leider nicht, wollte mir daraus eine Funktion basteln, die jetzt wie folgt aussieht.
PHP-Code:
function drawArticle() {
    
main.attachMovie("article""article_" _global.articlesDrawarticlesDraw 5);
    
main["article_"_global.articlesDraw]._y _global.articlesDraw _global.articlesHeight;
    
main["article_"_global.articlesDraw].createEmptyMovieClip("pic"main["article_"_global.articlesDraw].getNextHighestDepth()); 
    
main["article_"_global.articlesDraw].createEmptyMovieClip("picWatcher"main["article_"_global.articlesDraw].getNextHighestDepth());     
    
main["article_"_global.articlesDraw].pic.loadMovie("http://url.de/bild.jpg");
    
main["article_"_global.articlesDraw].picWatcher.onEnterFrame = function()
    {
        var 
mc this._parent.pic;
        if (
mc._width>0) {
            
trace(mc.getBytesTotal());
            
trace("Image Size is: "+mc._width+" x "+mc._height);
            
removeMovieClip(this);
        } else {
            
trace(mc.getBytesLoaded());
        }
    }
    
_global.articlesDraw++;

Die Variable mc ist bei mir auch "undefined" vielleicht liegt es daran, jedoch weiß ich leider nicht wie ich das Problem lösen kann, bin noch nicht so vertieft im Flash, wäre klasse wenn mir jemand helfen könnte.

MfG
Primusio
Primusio ist offline   Mit Zitat antworten
Alt 16-05-2006, 08:36   #10 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
var mc = this._parent.pic;

Setz dahinter mal ein trace(mc); und guck was da rauskommt ... die Pfadangabe sieht in dem Kontext etwas seltsam aus.
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 16-05-2006, 09:56   #11 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 67
Hallo,
wie ich schon schrieb "mc = undefined".
Hab schon einiges anderes versucht aber leider bekomme ich das noch nicht hin.

Ich habe meine Bühne, auf diese wird ein empty Movieclip ("main") erstellt, dann eine Liste mit Arikeln für jeden Artikel ein Movieclip ("article_"+ _global.articlesDraw) und dort soll jetzt links jeweils das Produktbild erscheinen.

Hoffe jemand sieht meinen Fehler.

MfG
Primusio
Primusio ist offline   Mit Zitat antworten
Alt 17-05-2006, 08:26   #12 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 67
Kann mir niemand sagen wieso die Zeile
var mc = this._parent.pic;
bei mir "undefined" ist ? Wäre wirklich für nen kleinen Tipp dankbar oder einen Link zu einem anderen code, wie ich .jpg's laden und dessen Größe anpassen kann.

MfG
Primusio
Primusio 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 18:25 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele