Rheinwerk Design < openbook > Rheinwerk 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
Rheinwerk 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


Rheinwerk 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.


Rheinwerk 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;

Rheinwerk 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 Rheinwerk-Shop
Zum Rheinwerk-Shop: ActionScript 1 und 2
ActionScript 1 und 2
bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: JavaScript






 JavaScript


Zum Rheinwerk-Shop: jQuery






 jQuery


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Rheinwerk-Shop: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag 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.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern