Galileo Design < openbook > Galileo Design - Know-how für Kreative.
Know-how für Kreative

 << zurück
ActionScript 1 und 2 von Sascha Wolter (http://www.saschawolter.de/)
Objektorientierung und Codedesign mit Flash MX 2004
Buch: ActionScript 1 und 2

ActionScript 1 und 2
672 S., mit CD, Referenzkarte, 44,90 Euro
Galileo Design
ISBN 3-89842-221-6
gp Kapitel 21 D mit Flash
  gp 21.1 Drei Dimensionen
  gp 21.2 Perspektiven in Flash
  gp 21.3 Zusatzprodukte
    gp 21.3.1 Swift 3D und Swift 3D Xpress
  gp 21.4 2 ½ Dimensionen
    gp 21.4.1 Zweidimensionale Objekte im dreidimensionalen Raum
    gp 21.4.2 z-Reihenfolge
  gp 21.5 Richtiges 3D
    gp 21.5.1 Performance
    gp 21.5.2 Drahtgittermodell
    gp 21.5.3 Darstellung – oder von 3D nach 2D
    gp 21.5.4 Dreidimensional transformieren
    gp 21.5.5 Weitere Optimierung
  gp 21.6 Isometrie


Galileo Design - Zum Seitenanfang

21.4 2 ½ Dimensionen  downtop

3D\2,5D in Flash

Dieses Kapitel nutzt noch ActionScript 1, um die Beispiele auch für ältere Flash Player nutzen zu können.

Solange sich die Dreidimensionalität durch wenig Dynamik und kaum Interaktion auszeichnet, kann meist alles im Vorfeld erstellt und dann von Flash dargestellt werden. Aber spätestens bei dynamischen Änderungen der 3D-Welt stoßen die vorgefertigten Elemente auf ihre Grenzen.


Galileo Design - Zum Seitenanfang

21.4.1 Zweidimensionale Objekte im dreidimensionalen Raudowntop

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 21.2   2 ½ D kann auch Tiefe vermitteln.

Eine relativ einfache Lösung ist das so genannte 2 ½ D, bei dem zwar der Raum dreidimensional ist, die in ihm platzierten Elemente aber keine Tiefe besitzen. Ein einfaches Beispiel hierfür sind moderne fensterorientierte Betriebssysteme wie Windows oder Mac OS. Die Fenster sind flächige zweidimensionale Objekte, deren Position im Vorder- oder Hintergrund die z-Reihenfolge bestimmt. Die z-Reihenfolge übernimmt somit die Funktion der dritten Dimension. Um die Position eines Objekts innerhalb dieser z-Reihenfolge zu verändern, verwenden Sie in Flash die Movieclip-Methode swapDepths. Diese Methode versteht als Parameter entweder eine andere Movieclip-Instanz und tauscht mit dieser die z-Position oder eine Zahl, die für eine spezielle Position steht – sollte sich an dieser Position bereits eine Instanz befinden, so wird ebenfalls einfach getauscht:

swapDepths.fla
mcRoterBall.onRelease = function() {
   // Wechsle in die Tiefe 10
   this.swapDepths(10);
};
mcBlauerBall.onRelease = function() {
   // Wechsle in die Tiefe 10
   this.swapDepths(10);
};

Um den Eindruck von Tiefe zu erhöhen, sollte die z-Reihenfolge durch die wirkliche Position auf der z-Achse bestimmt werden und sich ebenfalls in der Größe des Objekts widerspiegeln – für diese Größenänderung ist nicht immer ein schwieriger dreidimensionaler Projektionsalgorithmus notwendig. Mit etwas weniger perfekten Ansprüchen reicht auch eine einfache Berechnung:

groessenaenderung.fla
mcRoterBall.onPress = function() {
   // Starte Drag and Drop
   this.startDrag();
};
mcRoterBall.onRelease = function() {
   // Stoppe Drag and Drop
   this.stopDrag();
};
mcRoterBall.onReleaseOutside = mcRoterBall.onRelease;
mcRoterBall.onEnterFrame = function() {
   // Kopple y-Position mit z-Position
   this._xscale = this._y;
   this._yscale = this._xscale;
   if (this._xscale>_root.mcBlauerBall._xscale && this.getDepth()<_root.mcBlauerBall.getDepth()) {
      // Tausche, falls das Objekt größer ist und hinten liegt
      this.swapDepths(_root.mcBlauerBall);
   } else if (this._xscale<_root.mcBlauerBall._xscale && this.getDepth()>_root.mcBlauerBall.getDepth()) {
      // Tausche, falls das Objekt kleiner ist und vorne liegt
      this.swapDepths(_root.mcBlauerBall);
   }
};

// Kopple y-Position mit z-Position
mcBlauerBall._xscale = mcBlauerBall._y;
mcBlauerBall._yscale = mcBlauerBall._xscale;

Galileo Design - Zum Seitenanfang

21.4.2 z-Reihenfolge  toptop

Bei mehr als zwei Objekten hilft bei der Verwaltung der z-Reihenfolge eine Datenstruktur, die alle Elemente nach ihrer z-Position sortiert und entsprechend darstellt. Das folgende Skript übernimmt diese Aufgabe – wenn auch die Rechengeschwindigkeit durch einen komplizierteren Sortieralgorithmus (z.B. das so genannte Quicksort), auf den hier zur besseren Verständlichkeit verzichtet wurde, noch deutlich erhöht werden könnte:

z-reihenfolge.fla
// Mache Objekte interaktiv
MovieClip.prototype.onPress = function() {
   // Starte Drag and Drop
   this.startDrag();
};
MovieClip.prototype.onRelease = function() {
   // Stoppe Drag and Drop
   this.stopDrag();
};
MovieClip.prototype.onReleaseOutside = MovieClip.prototype.onRelease;
// Sammle Objekte in einem Array
elemente = new Array();
_root.elemente.push(mcBlauerBall);
_root.elemente.push(mcRoterBall);
_root.elemente.push(mcGruenerBall);
// Berechne z-Reihenfolge
_root.onEnterFrame = function() {
   // Sortiere bzgl. der y-Position
   for (var i = 0; i<_root.elemente.length-1; i++) {
      for (var j = i+1; j<_root.elemente.length; j++) {
         if (_root.elemente[i]._y>_root.elemente[j]._y) {
            var dummy = _root.elemente[i];
            _root.elemente[i] = _root.elemente[j];
            _root.elemente[j] = dummy;
         }
      }
   }
   // Bestimme Tiefe und Größe
   for (var i = _root.elemente.length-1; i>=0; i--) {
      _root.elemente[i].swapDepths(i);
      // Kopple y-Position mit z-Position
      _root.elemente[i]._xscale = _root.elemente[i]._y;
      _root.elemente[i]._yscale = _root.elemente[i]._xscale;
   }
};

Abgesehen von der mehr oder weniger unrealistischen perspektivischen Wirkung und den flächigen Objekten ist 2 ½ D ein adäquater Kompromiss für die dreidimensionale Darstellung.

 << zurück
  
  Zum Katalog
Zum Katalog: ActionScript 1 und 2
ActionScript 1 und 2
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Einstieg in ActionScript - Aktuell zu Flash 8






 Einstieg in ActionScript


Zum Katalog: Einstieg in Flash 8






 Einstieg in Flash 8


Zum Katalog: Flash 8 und PHP






 Flash 8 und PHP


Zum Katalog: Flash 8-Tutorials






 Flash 8-Tutorials


Zum Katalog: Dreamweaver 8






 Dreamweaver 8


Zum Katalog: Webseiten programmieren und gestalten






 Webseiten programmieren und gestalten


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Design]

Galileo Press GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de