tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Jens B.
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
694
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Webflasher Webflasher ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    50
    Hallo Leute,

    ich habe bei meiner Flashslideshow das Problem, dass die Bilder immer an die Größe des Flashfensters angepasst werden.
    Dabei gehen allerdings Seitenverhältnisse und Proportionen verloren. Wie kann ich dafür sorgen, dass dies nicht so ist?

    Hier der Code:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    
    import mx.transitions.*;
     
    //Diesen Code am anfang der Skriptes setzen
    Stage.scaleMode = "noScale";  
    Stage.align = "TL"; 
     
    //leeren MC erstellen
    this.createEmptyMovieClip("con",1);
     
    //zuerst transparent setzen
    this.con._alpha = 0;
     
    //Zähler
    var index:Number = 0;
     
    //Liste der Bilder
    var urls:Array = new Array("(1).jpg", "(2).jpg", "(3).jpg", "(4).jpg", "(5).jpg", "(6).jpg", "(7).jpg", "(8).jpg", "(9).jpg", "(10).jpg", "(11).jpg", "(12).jpg");
     
    //Anzahl der Bilder ermitteln über Länge des Arrays
    var len:Number = urls.length;
     
    //5 Sekunde = 5000 Millisekunden Pause zwischen den Bildern
    var pause:Number = 5000;
     
     
    var o:Object = new Object();
    Stage.addListener(o);
    o.onResize = function() {
        bg._x = Stage.width/2;
        bg._y = Stage.height/2;
        con._x = Stage.width/2-con._width/2;
        con._y = Stage.height/2-con._height/2;
        setBackgroundSize();
    };
    o.onResize();
    /**
    *Das Hintergundbild soll  das gesamten Browserfenster einnehmen
    */
    function setBackgroundSize() {
        var p:Number;
        if (bg._width<Stage.width) {
            p = Stage.width/bg._width;
            bg._width = Stage.width;
            bg._height *= p;
        }
     if (bg._height<Stage.height) {
            p = Stage.height/bg._height;
            bg._height = Stage.height;
            bg._width *= p;
        }
    }
    function startLoader(){
        //Lauscher und MovieClipLoader-Instanz erstellen
        _root.mclListener = new Object();
        _root.mcLoader = new MovieClipLoader();
        _root.mcLoader.addListener(_root.mclListener);
        
        //und das erste Bild laden
        _root.mcLoader.loadClip("..."+_root.urls[index], _root.con);
     
            //Bild ist geladen und MC wurde befüllt:
        mclListener.onLoadInit = function(mc:MovieClip) {
            trace("fertig, beladen wurde "+mc);
            
            //MC Skalieren
            mc._width = Stage.width;
            mc._height = Stage.height;
            
             //MC auf die Bühnen-Mitte setzen:
            mc._x = int((Stage.width - mc._width)/2);
            mc._y = int((Stage.height - mc._height)/2);
            _root.fader(mc,true);
        }  
     
    }
     
    function fader(mc,blende){
       //mc ist das ein- oder auszublendende Objekt
       //blende ist true oder false, d.h. blendet ein oder aus
        if(blende){
          //einblenden von alpha=0 bis alpha=100 in 0,6 Sekunden
          var tw1:Tween = new Tween(mc, "_alpha", mx.transitions.easing.None.easeNone, 0, 100, 0.6, true);
          tw1.onMotionFinished = function() {//wenn ausblenden beendet...
            _root.meineID = setInterval(_root,"weiter",_root.pause);//5 Sek Pause
          }
       }
       else{//ausblenden
          var tw2:Tween = new Tween(mc, "_alpha", mx.transitions.easing.None.easeNone, 100, 0, 0.6, true);
          tw2.onMotionFinished = function() {//wenn ausblenden beendet...
            _root.folgefilm();//nächsten Film laden und einblenden
          }
       }
    }
     
    //Intervall ist beendet
    function weiter(){
        trace("Pause beendet");
        
        //Intervall wieder löschen
        clearInterval(_root.meineID);
        
        //aktuelles Bild ausblenden
        _root.fader(_root.con,false);
        
    }
     
    function folgefilm(){
        trace("folgefilm");
         _root.index++;
         
        //checken, ob das letzte Bild erreicht wurde
        if(_root.index == _root.len){
            //letztes Bild wurde gezeigt, wieder mit dem ersten Bild starten = Loop
            _root.index = 0;
        }
        _root.mcLoader.loadClip("..."+_root.urls[index], _root.con);
        
    }
     
     
    startLoader();
     
    this.stop();


    Vielen Dank
     

  2. #2
    Avatar von pixelpur
    pixelpur pixelpur ist offline Mitglied Bronze
    Registriert seit
    Jun 2008
    Beiträge
    46
    Warum skalierst du nich einfach immer nur die Breite? Du wirdst dann jedoch bei Hochkantbildern das problem haben, das Sie über die Bühne/Stage hinausgehen. Aber dann richtest du diese halt aus. Wenn du beide Seiten anpasst wird er Sie immer verzerren.
     
    Online Portfolio - www.innographix.de

  3. #3
    Webflasher Webflasher ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    50
    Sorry....
    So fit bin ich dann doch nicht. Wie stelle ich sowas an?

    Danke!
     

  4. #4
    Avatar von pixelpur
    pixelpur pixelpur ist offline Mitglied Bronze
    Registriert seit
    Jun 2008
    Beiträge
    46
    Probier das mal bin mir aber nicht sicher:

    Code :
    1
    2
    3
    4
    5
    6
    
    o.onResize = function() {
        bg._x = Stage.width/2;
        con._x = Stage.width/2-con._width/2;
        setBackgroundSize();
    };
    o.onResize();
     
    Online Portfolio - www.innographix.de

  5. #5
    Webflasher Webflasher ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    50
    Mir ist noch mehr aufgefallen! Einen weiter runter!

    Hat leider nicht funktioniert. Trotzdem DANKE.

    Mir ist noch aufgefallen, dass das Problem eigentlich nur bei Hochkantfotos auftritt, da kein Platz links und rechts gelassen wird.

    Zitat Zitat von pixelpur Beitrag anzeigen
    Probier das mal bin mir aber nicht sicher:

    Code :
    1
    2
    3
    4
    5
    6
    
    o.onResize = function() {
        bg._x = Stage.width/2;
        con._x = Stage.width/2-con._width/2;
        setBackgroundSize();
    };
    o.onResize();
    Wenn ich das ausprobiere werden die Bilder zwar scharf aber sie sind auch größer als die Bphne. Somit kann man nicht alles sehen. Vielleicht hilft das.

    Nach dem Anlernen von AS2 (mittels AS2 Referenzhandbuch) und dem darauf folgendem Frust, dass das alles nicht so will wie ich, habe ich zumindest logisch (ohne Code) einen Lösungsvorschlag gefunden.
    Wenn ihr mir vielleicht sagen könntet, ob diese Idee machbar ist, wäre ich euch sehr dankbar.

    Meine Idee ist wie folgt:

    Ich möchte, dass jedes Bild solange skaliert wird bis die Höhe des Bildes der Höhe des MCs entspricht. Diese Skalierung soll, wie bei den folgenden auch proportional geschehen. Nach der Faustregel, dass Breite durch Höhe immer 1,33 ergeben muss.

    Wenn nach dieser ersten Skalierung das Bild eine größere (kleiner ist egal) Breite als der MC aufweist, dann soll das Bild nach der gleichen Skalierungstechnik auf die Breite des MCs gebracht werden.

    Nehmt bitte zu Kenntnis, dass ich immer „in PHP denke“. Ich weiß also nicht ob das oben genannte auch mit AS2 möglich ist.

    Hoffentlich weiß irgendwer einen Rat. Ich weiß gar nicht mehr weiter und bin kurz davor nochmals ganz von vorne anzufangen (wofür ich aber eigentlich keine Zeit habe).

    Vielen Dank
    Geändert von Jens B. (20.03.10 um 01:36 Uhr)
     

  6. #6
    Avatar von Jens B.
    Jens B. Jens B. ist offline Damn good coffee!
    tutorials.de Premium-User
    Registriert seit
    Nov 2001
    Beiträge
    2.477
    Schau dir doch mal den Code an, den du da benutzt. Offensichtlich ist er nicht von dir aber wenigstens die Kommentare kann man lesen. Hier das ist in der Funktion startLoader:

    Code :
    1
    2
    3
    
    //MC Skalieren
    mc._width = Stage.width;
    mc._height = Stage.height;

    Jetzt musst du also sehen, wie groß die Bilder sein sollen. Wenn die zwar so groß wie möglich, aber auf jeden Fall komplett und mit dem richtigen Seitenverhältnis angezeigt werden müssen, musst du 2 Fälle unterscheiden: hochkant und längskant.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    // variable für den Grad der skalierung des Bildes. also wie viel mal größer es wird - bei 2 ist es doppelt so groß
    var skalierung = 0;
     
    if(mc._height > mc._width) {
    // höher als breit -> hochkant
    skalierung = Stage.height / mc._height;
    } else {
    // längskant
    skalierung = Stage.width / mc._width;
    }
     
    // skalieren
    mc._width *= skalierung;
    mc._height *= skalierung;

    Gruß
    .
     

  7. #7
    Webflasher Webflasher ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    50
    Hallo zusammen,

    @Jens B.: Du hast natürlich recht, der Code ist nicht von mir, sondern aus einem Tutorial.

    Es hat noch nicht funktioniert, liegt aber wahrscheinlich nicht an dem Code, sondern an zwei Dingen, die mir noch aufgefallen sind.
    1. Wenn der Code doch bewirken soll, dass die Bilder skaliert werden, dann widerspricht sich das doch mit einer Funktion weiter oben. Diese soll doch bewirken, dass die Bilder die Größe, der Bühne annehmen. Ich habe den Abschnitt in dem Code unten mal Markiert (sucht nach "AB HIER" "BIS HIER").
    2. Aus irgendeinem Grund werden die hochkant Bilder, immer um 90 Grad in eine beliebige Richtung gedreht.
    Es tut mir wirklich leid, das das alles so blöd läuft.

    Ich hatte mir übrigens selber folgenden logischen Ablauf für das Skalieren überlegt:

    Ich möchte, dass jedes Bild solange skaliert wird bis die Höhe des Bildes der Höhe des MCs entspricht. Diese Skalierung soll, wie bei den folgenden auch proportional geschehen. Nach der Faustregel, dass Breite durch Höhe immer 1,33 ergeben muss.

    Wenn nach dieser ersten Skalierung das Bild eine größere (kleiner ist egal) Breite als der MC aufweist, dann soll das Bild nach der gleichen Skalierungstechnik auf die Breite des MCs gebracht werden.

    Zum Schluss möchte ich nochmal daran errinnern, dass die Bilder momentan nicht der Bühnengröße entsprechen, sondern größer sind.

    Hier der Code:

    PHP-Code:
    import mx.transitions.*;

    //Diesen Code am anfang der Skriptes setzen
    Stage.scaleMode "noScale";  
    Stage.align "TL"

    //leeren MC erstellen
    this.createEmptyMovieClip("con",1);

    //zuerst transparent setzen
    this.con._alpha 0;

    //Zähler
    var index:Number 0;

    //Liste der Bilder
    var urls:Array = new Array("(1).jpg""(2).jpg""(3).jpg""(4).jpg""(5).jpg""(6).jpg""(7).jpg""(8).jpg""(9).jpg""(10).jpg""(11).jpg");

    //Anzahl der Bilder ermitteln über Länge des Arrays
    var len:Number urls.length;

    //5 Sekunde = 5000 Millisekunden Pause zwischen den Bildern
    var pause:Number 5000;

    //AB HIER

    var o:Object = new Object();
    Stage.addListener(o);
    o.onResize = function() {
        
    bg._x Stage.width/2;
        
    bg._y Stage.height/2;
        
    con._x Stage.width/2-con._width/2;
        
    con._y Stage.height/2-con._height/2;
        
    setBackgroundSize();
    };
    o.onResize();
    o.onResize = function() {
        
    bg._x Stage.width/2;
        
    con._x Stage.width/2-con._width/2;
        
    setBackgroundSize();
    };
    o.onResize();

    //Das Hintergundbild soll  das gesamten Browserfenster einnehmen

    function setBackgroundSize() {
        var 
    p:Number;
        if (
    bg._width<Stage.width) {
            
    Stage.width/bg._width;
            
    bg._width Stage.width;
            
    bg._height *= p;
        }
     if (
    bg._height<Stage.height) {
            
    Stage.height/bg._height;
            
    bg._height Stage.height;
            
    bg._width *= p;
        }
    }

    //BIS HIER

    function startLoader(){
        
    //Lauscher und MovieClipLoader-Instanz erstellen
        
    _root.mclListener = new Object();
        
    _root.mcLoader = new MovieClipLoader();
        
    _root.mcLoader.addListener(_root.mclListener);
        
        
    //und das erste Bild laden
        
    _root.mcLoader.loadClip("../bilder/bilder/orginal/home/"+_root.urls[index], _root.con);

            
    //Bild ist geladen und MC wurde befüllt:
        
    mclListener.onLoadInit = function(mc:MovieClip) {
            
    trace("fertig, beladen wurde "+mc);
            
            
    //MC Skalieren
            
    mc._width Stage.width;
            
    mc._height Stage.height;
            
            
    // variable für den Grad der skalierung des Bildes. also wie viel mal größer es wird - bei 2 ist es doppelt so groß
    var skalierung 0;

    if(
    mc._height mc._width) {
    // höher als breit -> hochkant
    skalierung Stage.height mc._height;
    } else {
    // längskant
    skalierung Stage.width mc._width;
    }

    // skalieren
    mc._width *= skalierung;
    mc._height *= skalierung;
            
             
    //MC auf die Bühnen-Mitte setzen:
            
    mc._x int((Stage.width mc._width)/2);
            
    mc._y int((Stage.height mc._height)/2);
            
    _root.fader(mc,true);
        }  

    }

    function 
    fader(mc,blende){
       
    //mc ist das ein- oder auszublendende Objekt
       //blende ist true oder false, d.h. blendet ein oder aus
        
    if(blende){
          
    //einblenden von alpha=0 bis alpha=100 in 0,6 Sekunden
          
    var tw1:Tween = new Tween(mc"_alpha"mx.transitions.easing.None.easeNone01000.6true);
          
    tw1.onMotionFinished = function() {//wenn ausblenden beendet...
            
    _root.meineID setInterval(_root,"weiter",_root.pause);//5 Sek Pause
          
    }
       }
       else{
    //ausblenden
          
    var tw2:Tween = new Tween(mc"_alpha"mx.transitions.easing.None.easeNone10000.6true);
          
    tw2.onMotionFinished = function() {//wenn ausblenden beendet...
            
    _root.folgefilm();//nächsten Film laden und einblenden
          
    }
       }
    }

    //Intervall ist beendet
    function weiter(){
        
    trace("Pause beendet");
        
        
    //Intervall wieder löschen
        
    clearInterval(_root.meineID);
        
        
    //aktuelles Bild ausblenden
        
    _root.fader(_root.con,false);
        
    }

    function 
    folgefilm(){
        
    trace("folgefilm");
         
    _root.index++;
         
        
    //checken, ob das letzte Bild erreicht wurde
        
    if(_root.index == _root.len){
            
    //letztes Bild wurde gezeigt, wieder mit dem ersten Bild starten = Loop
            
    _root.index 0;
        }
        
    _root.mcLoader.loadClip("../bilder/bilder/orginal/home/"+_root.urls[index], _root.con);
        
    }


    startLoader();

    this.stop(); 

    Vielen Dank
    Geändert von Webflasher (21.03.10 um 10:58 Uhr)
     

  8. #8
    Avatar von Jens B.
    Jens B. Jens B. ist offline Damn good coffee!
    tutorials.de Premium-User
    Registriert seit
    Nov 2001
    Beiträge
    2.477
    Die von dir markierten Zeilen skalieren lediglich das Hintergrundbild auf die volle Größe der Bühne. Auch das steht in den Kommentaren:

    //Das Hintergundbild soll das gesamten Browserfenster einnehmen
    Magst du mal die fla und ein paar Beispielbilder posten dass man das ganze mal ausprobieren und sehen kann. Kannst es ja irgendwo hochladen und verlinken.
     

  9. #9
    Webflasher Webflasher ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    50
    Klar, mach ich:

    Hier der Link zur fla:
    (entfernt)

    Vielen Dank

    P.S.: Ich würde die Dateien gerne so schnell wie möglich wieder löschen
    Geändert von Jens B. (21.03.10 um 21:02 Uhr)
     

  10. #10
    Avatar von Jens B.
    Jens B. Jens B. ist offline Damn good coffee!
    tutorials.de Premium-User
    Registriert seit
    Nov 2001
    Beiträge
    2.477
    Probier's mal mit der fla im Anhang.

    Irgendwas scheint mit dein Bildern nicht zu stimmen, die wurden auch im Windows Explorer als längskant angezeigt - als ich sie dann in Photoshop geöffnet habe waren manche aber hochkant. Als ich die dann gespeichert und in der fla verwendet habe ging's. Außerdem sind die Bilder viel zu groß, denk mal darüber nach die bei der Gelegenheit gleich kleiner zu skalieren.

    Gruß
    jens
    Angehängte Dateien Angehängte Dateien
    Webflasher bedankt sich. 

  11. #11
    Webflasher Webflasher ist offline Mitglied Silber
    Registriert seit
    Oct 2009
    Beiträge
    50
    @Jens B.:

    Vielen Dank! Es hat geklappt.

    Ich könnte „Vielen Dank!“ jetzt tausend mal kopieren, aber ich glaube die Botschaft ist die Selbe...

    Mir fällt momentan nichts ein, wie ich bzw. wir (wenn du den u. g. Link anklickst, weißt du was ich meine) mich/uns revanchieren kann/können....

    Guck dir gerne mal (wenn du es noch nicht gemacht hast) die Homepage an, klicke einfach hier.

    Nochmals Vielen Dank und bis dann...

    P.S.: Solltest du (nur wenn du Langeweile hast ; hat auch bei mir eine sehr geringe Priorität) einen Code kennen, der bewirkt, dass die Diashow pausiert, wenn mann mit der Maus drüber fährt, dann wäre ich dir mal wieder sehr dankbar, wenn du diesen posten würdest...

    Edit: Danke das du die Links (weiter oben) gelöscht hast
    Geändert von Webflasher (22.03.10 um 19:37 Uhr) Grund: siehe Edit
     

Ähnliche Themen

  1. XML Flashslideshow
    Von Alaniak im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 06.11.08, 08:00
  2. Bild verkleinern mit Proportionen beibehalten?
    Von Alex1987 im Forum Photoshop
    Antworten: 1
    Letzter Beitrag: 17.11.07, 15:23
  3. Proportionen meines Pop-up-Fensters
    Von anopheles1337 im Forum PHP
    Antworten: 12
    Letzter Beitrag: 28.07.06, 19:45
  4. Bilder zuschneiden, proportionen beibehalten
    Von LotseDerLotsen im Forum PHP
    Antworten: 3
    Letzter Beitrag: 15.02.05, 18:40
  5. Wie halte ich die Proportionen?
    Von Trelonist im Forum HTML & XHTML
    Antworten: 1
    Letzter Beitrag: 31.10.04, 10:48