Skapa och flytta 3D-visningsobjekt
Flash Player 10 och senare, Adobe AIR 1.5 och senare
Om du vill konvertera ett 2D-visningsobjekt till ett 3D-visningsobjekt anger du explicit dess
z
-egenskap till ett numeriskt värde. När du tilldelar ett värde till
z
-egenskapen, skapas ett nytt Transform-objekt för visningsobjektet. När du ställer in egenskapen
DisplayObject.rotationX
eller
DisplayObject.rotationY
skapas också ett nytt Transform-objekt. Transform-objektet innehåller en
Matrix3D
-egenskap som styr hur visningsobjektet visas i 3D-rymden.
Följande kod ställer in koordinaterna för ett visningsobjekt med namnet ”leaf”:
leaf.x = 100; leaf.y = 50; leaf.z = -30;
Dessa värden, samt egenskaper som härleds från dessa värden, visas i
matrix3D
-egenskapen för bladets Transform-objekt:
var leafMatrix:Matrix3D = leaf.transform.matrix3D;
trace(leafMatrix.position.x);
trace(leafMatrix.position.y);
trace(leafMatrix.position.z);
trace(leafMatrix.position.length);
trace(leafMatrix.position.lengthSquared);
Mer information om egenskaperna för Transform-objektet finns i avsnittet om
Transform
-klassen. Mer information om egenskaperna för Matrix3D-objektet finns i avsnittet om
Matrix3D
-klassen.
Flytta ett objekt i 3D-rymden
Du kan flytta ett objekt i 3D-rymden genom att ändra värdena på dess
x-, y- och z
-egenskaper. När du ändrar värdet på
z
-egenskapen verkar det som om objektet flyttas närmare eller längre bort från vypunkten.
Följande kod flyttar två ellipser bakåt och framåt utmed deras z-axlar genom att ändra värdet på
z
-egenskaperna som svar på en händelse.
ellipse2
flyttar snabbare än
ellipse1
:
z
-egenskapen för ellipse2 ökar med multipeln 20 vid varje Frame-händelse medan
z
-egenskapen för
ellipse1
ökar med multipeln 10:
var depth:int = 1000;
function ellipse1FrameHandler(e:Event):void
{
ellipse1Back = setDepth(e, ellipse1Back);
e.currentTarget.z += ellipse1Back * 10;
}
function ellipse2FrameHandler(e:Event):void
{
ellipse2Back = setDepth(e, ellipse1Back);
e.currentTarget.z += ellipse1Back * 20;
}
function setDepth(e:Event, d:int):int
{
if(e.currentTarget.z > depth)
{
e.currentTarget.z = depth;
d = -1;
}
else if (e.currentTarget.z < 0)
{
e.currentTarget.z = 0;
d = 1;
}
}
Rotera ett objekt i 3D-rymden
Du kan rotera ett objekt på tre olika sätt, beroende på hur du ställer in objektets rotationsegenskaper:
rotationX
,
rotationY
och
rotationZ
.
I bilden nedan visas två fyrkanter som inte roterar:
I nästa bild visas de två fyrkanterna när du ökar
rotationY
-egenskapen för fyrkanternas behållare för att rotera dem vid y-axeln. Om du roterar behållaren, eller det överordnade visningsobjektet, roteras båda fyrkanterna:
container.rotationY += 10;
I nästa bild visas vad som händer när du ställer in
rotationX
-egenskapen för fyrkanternas behållare. Då roteras fyrkanterna vid x-axeln.
I nästa bild visas vad som händer när du ökar
rotationZ
-egenskapen för fyrkanternas behållare. Då roteras de vid z-axeln.
Ett visningsobjekt kan flytta och rotera samtidigt i 3D-ytan.
|
|
|