In diesem Tutorial bauen wir eine Box, in die wir Würfel werfen können. Dazu verwenden wir Away3D als 3D-Engine und Jiglib als Physik-Engine. Lass uns reinstecken…
Wie der Titel schon sagt, erstellen wir zunächst eine neue ActionScript 3.0-Datei.
Klicken Sie im Eigenschaftenbereich auf die Schaltfläche Bearbeiten.
Wählen Sie das Flash Player 9-Profil und klicken Sie auf OK.
Speichern Sie Ihre Datei als "3D Dice.fla" in einem neuen Ordner mit dem Namen "3D Dice". Laden Sie jetzt die Away3D-Engine von Away3D-Downloads herunter. Wir verwenden Version 2.3.3 für Flash Player 9. Entpacken Sie ein Archiv und kopieren Sie alle Ordner in den Ordner "3D Dice".
Sie müssen ein SVN-Programm installieren, um diese Quelldateien zu erhalten. Hier ist die SVN-Adresse. Wenn Sie nicht mit all dem umgehen wollen, können Sie sie auch aus den Quelldateien für dieses Tut erhalten. Nachdem Sie die Away3D- und Jiglib-Klassen in Ihren 3D-Würfelordner verschoben haben, sollten Ihre Dokumente folgendermaßen aussehen:
Ich habe einige Texturen für unsere Würfel gezeichnet. Natürlich können Sie diese ändern, aber sie sind nicht schlecht :) Weitere Texturen finden Sie in der Quelldatei.
Würfel-Texturen:
Jetzt müssen wir ihnen Verknüpfungsnamen geben, um sie zur Laufzeit anzufügen (tun Sie dies für jedes Bild in Ihrer Bibliothek nacheinander):
Wählen Sie Bild aus und klicken Sie mit der rechten Maustaste auf> Eigenschaften
Export für ActionScript> Teil ".png" entfernen
OK, wir können mit dem Programmieren beginnen. Zuerst importieren wir unsere Klassen:
import3d.cameras importieren. *; import away3d.containers. *; import3d.materials importieren. *; away3d.primitives importieren. * away3d.lights.DirectionalLight3D importieren
import jiglib.physics.RigidBody; Import jiglib.plugin.away3d.Away3DPhysics; import jiglib.plugin.away3d.Away3dMesh; Importieren Sie jiglib.math.JNumber3D
Nach dem Import unserer Klassen müssen wir unsere Variablen definieren, um sie in den nächsten Schritten verwenden zu können.
Var-Szene: Scene3D; Var Kamera: HoverCamera3D; var view: View3D; var light: DirectionalLight3D; Var Physik: Away3DPhysics;
var boxWidth: Number = 250 var boxHöhe: Number = 30 var boxDepth: Number = 250 var boxThickness: Number = 5
var diceTextures: Array = [neues WhiteShadingBitmapMaterial (neue DiceTexture1 (0,0)), neues WhiteShadingBitmapMaterial (neue DiceTexture2 (0,0)), neues WhiteShadingBitmapMaterial (neue DiceTexture3 (0,0)), neues WhiteShadingBitmapMaterial (neues DiceTexture4), 0)), neues WhiteShadingBitmapMaterial (neue WürfelTexture5 (0,0)), neues WhiteShadingBitmapMaterial (neue WürfelTexture6 (0,0))]
var wallTexture: WhiteShadingBitmapMaterial = new WhiteShadingBitmapMaterial (neue Wandtextur (0,0)) var groundTexture: WhiteShadingBitmapMaterial = neues WhiteShadingBitmapMaterial (neue Bodentextur (0,0))
var diceScale: Number = 30 var-würfel: Array = new Array () var diceRandomForce: Number = 50
Wie Sie vielleicht schon erraten haben, sind die ersten für Away3D. Die Variablennamen sind einfach, sodass Sie erraten können, wozu sie dienen.
diceTextures enthält die Würfelgesichtstexturen. Wir nehmen Würfeltexturbilder aus der Bibliothek und legen sie in WhiteShadingBitmapMaterial ab. Wir wählen dieses Material aus, weil es die Dinge leicht hält und zur weiteren Verbesserung der Leistung auch flach bleibt. WhiteShadingBitmapMaterial ist das Beste für unsere Bedürfnisse.
wallTexture und groundTexture verwenden unterschiedliche Bilder. Die Verwendung eines dieser Elemente in unserem Fall würde schrecklich aussehen.
Als nächstes müssen wir Away3D bauen.
function initAway3D (): void scene = new Scene3D ();
Kamera = neuer HoverCamera3D (); camera.distance = 300
light = new DirectionalLight3D (color: 0xFFFFFF, Umgebung: 0,25, diffus: 0,75, spekular: 0,9) scene.addChild (light) view = new View3D (scene: scene, camera: camera); view.x = stage.stageWidth / 2; view.y = stage.stageHeight / 2; addChild (view); Physik = neue Away3DPhysics (view, 4)
Die erste Zeile dieser Funktion erstellt unsere 3D-Szene, in die wir 3D-Objekte einfügen. Für die Kamera wählen wir HoverCamera3D. HoverCamera ist die beste Möglichkeit, die Kamera um die Objekte herum zu drehen. Eigentlich brauchst du kein Licht für dieses Projekt, aber es macht das Experiment cool :) Wir erstellen die Ansicht und stellen sie in die Mitte der Szene.
Zuletzt erstellen wir neue Away3DPhysics. Der erste Parameter ist "View3D" und der zweite ist "Schwerkraft" (ich verwende 4, aber wenn Sie möchten, können Sie eine andere Nummer versuchen).
function createWalls (): void var left: RigidBody = physics.createCube (width: boxThickness, height: boxHeight, Tiefe: boxDepth); left.movable = falsch; left.x = - (boxWidth + boxThickness) / 2 Away3dMesh (left.skin) .mesh.material = wallTexture var rechts: RigidBody = physics.createCube (width: boxThickness, height: boxHeight, Tiefe: boxDepth); right.movable = falsch; right.x = (boxWidth + boxThickness) / 2 Away3dMesh (right.skin) .mesh.material = wallTexture var front: RigidBody = physics.createCube (width: boxWidth, height: boxHeight, Tiefe: boxThickness); front.movable = false; front.z = (boxDepth + boxThickness) / 2 Away3dMesh (front.skin) .mesh.material = wallTexture var zurück: RigidBody = physics.createCube (width: boxWidth, height: boxHeight, Tiefe: boxThickness); zurück.beweglich = falsch; back.z = - (boxDepth + boxThickness) / 2 Away3dMesh (back.skin) .mesh.material = wallTexture var geschliffen: RigidBody = physics.createCube (Breite: BoxWidth, Höhe: BoxThickness, Tiefe: BoxDepth, SegmenteW: 2, Segmente H: 2); Bodenbeweglich = falsch; ground.y = - (boxHeight + boxThickness) / 2 Away3dMesh (ground.skin) .mesh.material = groundTexture Away3dMesh (ground.skin) .mesh.pushback = true
Es sieht nach einem Durcheinander aus :) Eigentlich nein. Klicken Sie in der folgenden Demo auf die Wände der Box, um zu erfahren, wie wir ihre Position festlegen:
Wir verwenden Cubes als Wände, aber dafür verwenden wir physics.createCube. Sie können Material nicht direkt in Parametern festlegen. Jiglib Away3D-Plugin erlaubt dies nicht (obwohl Sie die Away3DPhysics.as-Datei ändern können, um dies zuzulassen, wenn Sie möchten). Um das Material zu ändern, benötigen wir das ursprüngliche Away3D-Objekt:
Away3dMesh (RigidObject.skin) .mesh
Auf diese Weise bringen wir unsere Texturen an die Wände unserer Wände an. Beweglich auf falsch gesetzt, weil wir nicht wollen, dass sie richtig verschoben werden? :) Wenn wir einen Boden erstellen, setzen wir auch seine Pushback-Eigenschaft auf true, damit der Boden nicht über die Wände springen kann.
function createDice (): void var dice: RigidBody = physics.createCube (width: diceScale, Höhe: diceScale, Tiefe: diceScale); dice.y = 500 dice.movable = true Würfel (Away3dMesh (dice.skin) .mesh) .cubeMaterials.left = diceTextures [0] Cube (Away3dMesh (dice.skin) .mesh) .cubeMaterials.right = 1 WürfelTexturen [1] Cube (Away3dMesh (dice.skin) .mesh) .cubeMaterials.front = diceTextures [2] Cube (Away3dMesh (dice.skin) .mesh) .cubeMaterials.back = diceTextures [3] Cube (Away3dMesh (dice.skin) .mesh ) .cubeMaterials.top = diceTextures [4] Würfel (Away3dMesh (dice.skin) .mesh) .cubeMaterials.bottom = diceTextures [5] dices.push (dice)
Wie Sie sehen, ist es wirklich einfach. Wir erstellen im Grunde einen Würfel und bringen seinen Flächen Texturen zu. Um verschiedene Texturen an verschiedenen Flächen anzubringen, verwenden wir cubeMaterials. cubeMaterials haben 6 Eigenschaften, die wir verwenden. Diese sind:
Sie können jedes Material festlegen, aber wir verwenden Elemente von diceTextures, die wir in Schritt 8 erstellt haben.
Funktion resetOnlyPositions (): void for (var i: int = 0; iIn diesen Funktionen setzen wir ihre Positionen zurück. Der erste ist für den Anfang. Der zweite wird ausgeführt, wenn der Benutzer auf die Bühne klickt. Die zweite Funktion fügt den Würfeln auch zufällige Kräfte hinzu. Dadurch fangen unsere Würfel an zu taumeln.
Schritt 13: Zufällige Kräfte zu Würfeln hinzufügen
Funktion addRandomForce (starr: RigidBody) var forceX: Number = + Math.random () * (diceRandomForce) var forceY: Number = + Math.random () * (diceRandomForce) var forceZ: Number = + Math.random () * (diceRandomForce) starr.addBodyForce (neue JNumber3D (forceX, forceY, forceZ), neue JNumber3D (starr.x + diceScale, starr.y, starr.z)) starr.addBodyForce (neue JNumber3D (-forceX, -forceY, -forceZ ), neue JNumber3D (Rigid.x - DiceScale, Rigid.y, Rigid.z))Zuerst erhalten wir zufällige Werte für unsere Kräfte. Mit diesen Werten wenden wir Kräfte in entgegengesetzte Richtungen auf die gegenüberliegenden Seiten jedes Würfels an. Dies zwingt die Würfel zum Drehen.
Schritt 14: Zuhörer
function initListeners (): void stage.addEventListener (Event.ENTER_FRAME, Rendern); stage.addEventListener (MouseEvent.MOUSE_DOWN, resetAllDices)In dieser Funktion fügen wir der Bühne MOUSE_DOWN- und ENTER_FRAME-Listener hinzu.
Schritt 15: Rendern
function render (e: Event): void view.render (); camera.targetpanangle = stage.mouseX / stage.stageWidth * 360 camera.targettiltangle = stage.mouseY / stage.stageHeight * 30 camera.hover (); physics.step (); light.x = camera.x light.y = camera.y light.z = camera.zDie erste Zeile dieser Funktion rendert das 3D. Dann verwenden wir in der Mathematik wahre Proportionen, um die Kamera mithilfe der Mauspositionen zu drehen. Dann gleichen wir die Richtung des Lichts an die Position unserer Kamera aus. Dies macht unser Licht dynamisch und macht unser Experiment ziemlich cool.
Schritt 16: Letzter Schritt
initAway3D (); createWalls (); createDice (); createDice (); resetOnlyPositions () initListeners ();Wir rufen unsere Funktionen einzeln auf. Ich habe die createDice () - Funktion zweimal aufgerufen, also gibt es in der Demo 2 Würfel. Sie können beliebig viele hinzufügen.
OK. Wir sind bereit. Testen Sie Ihre Arbeit und klicken Sie auf die Bühne :)
Fazit
In diesem Tutorial haben wir gelernt, wie man Jiglib mit Away3D verwendet und ein einfaches Experiment erstellt.
Ich hoffe es hat euch gefallen, danke fürs Lesen!