Know-how für Kreative

Inhaltsverzeichnis
1 Erste Schritte
2 Versionen
3 Einführung in die Programmierung
4 Die Entwicklungsumgebung
5 Regeln
6 Anweisungen und Aktionen
7 Werte und Datentypen
8 Ausdrücke und Operatoren
9 Funktionen
10 Kontrollstrukturen
11 Dokumenten-Objektmodell und Gültigkeitsbereich (Scope)
12 Ereignisse
13 Objekterstellung
14 Vererbung
15 Movieclips
16 ActionScript 2.0
17 Komponenten
18 Codedesign und Konzeption
19 Flashdetection
20 Aussergewoehnliche Benutzerfuehrung
21 D mit Flash
22 Macromedia Central
23 HTML
24 JavaScript, ActiveX und Java
25 Flash undokumentiert
26 Vergangenheit, Gegenwart und Zukunft
27 Kurzreferenz
28 Buchtipps
29 Links
30 Die CD-ROM zum Buch
Index
Download: - ZIP, ca. 9,8 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Design / <openbook> / ActionScript | vor >>
ActionScript 1 und 2 von Sascha Wolter (http://www.saschawolter.de/) Objektorientierung und Codedesign mit Flash MX 2004
ActionScript 1 und 2 672 S., mit CD, Referenzkarte, 44,90 Euro Galileo Design ISBN 3-89842-221-6 |
| Kapitel 21 D mit Flash
|  | 21.1 Drei Dimensionen
|  | 21.2 Perspektiven in Flash
|  | 21.3 Zusatzprodukte
|  |  | 21.3.1 Swift 3D und Swift 3D Xpress
|  | 21.4 2 ½ Dimensionen
|  |  | 21.4.1 Zweidimensionale Objekte im dreidimensionalen Raum
|  |  | 21.4.2 z-Reihenfolge
|  | 21.5 Richtiges 3D
|  |  | 21.5.1 Performance
|  |  | 21.5.2 Drahtgittermodell
|  |  | 21.5.3 Darstellung – oder von 3D nach 2D
|  |  | 21.5.4 Dreidimensional transformieren
|  |  | 21.5.5 Weitere Optimierung
|  | 21.6 Isometrie
## 21.4 2 ½ Dimensionen ##### 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. ### 21.4.1 Zweidimensionale Objekte im dreidimensionalen Raum 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;
### 21.4.2 z-Reihenfolge 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 | <top> | vor >>
Zum Katalog
ActionScript 1 und 2 bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchtipps
| Einstieg in ActionScript
| Einstieg in Flash 8
| Flash 8 und PHP
| Flash 8-Tutorials
| Dreamweaver 8
| Webseiten programmieren und gestalten
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

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