Kostka 6 boczna obracana w trójwymiarze 3D [ ActionScript 3 ]
Skrypt tworzy obracająca się kostkę 3D, złożoną z 6 różnokolorowych boków. Kostka się obraca się proporcjonalnie do wychylenia najechanego kursora myszki.
Efekt trój wymiaru dla kilku kostki 3D, zbudowanej z trójkątów.
Wersja On-Line:
Listing
//KOD DLA KLASY Kostka3D.as
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
public class Kostak3D extends Sprite
{
private var punkty:Array;
private var trojkaty:Array;
private var fl:Number = 250;
private var vpX:Number = stage.stageWidth / 2;
private var vpY:Number = stage.stageHeight / 2;
public function Kostka3D()
{
init();
}
private function init():void
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
punkty = new Array();
// front four corners
punkty[0] = new Point3D(-100, -100, -100);
punkty[1] = new Point3D( 100, -100, -100);
punkty[2] = new Point3D( 100, 100, -100);
punkty[3] = new Point3D(-100, 100, -100);
// back four corners
punkty[4] = new Point3D(-100, -100, 100);
punkty[5] = new Point3D( 100, -100, 100);
punkty[6] = new Point3D( 100, 100, 100);
punkty[7] = new Point3D(-100, 100, 100);
for(var i:uint = 0; i < punkty.length; i++)
{
punkty[i].setVanishingPoint(vpX, vpY);
punkty[i].setCenter(0, 0, 200);
}
trojkaty = new Array();
// front
trojkaty[0] = new Triangle(punkty[0], punkty[1], punkty[2], 0x6666cc);
trojkaty[1] = new Triangle(punkty[0], punkty[2], punkty[3], 0x6666cc);
// top
trojkaty[2] = new Triangle(punkty[0], punkty[5], punkty[1], 0x66cc66);
trojkaty[3] = new Triangle(punkty[0], punkty[4], punkty[5], 0x66cc66);
//back
trojkaty[4] = new Triangle(punkty[4], punkty[6], punkty[5], 0xcc6666);
trojkaty[5] = new Triangle(punkty[4], punkty[7], punkty[6], 0xcc6666);
// bottom
trojkaty[6] = new Triangle(punkty[3], punkty[2], punkty[6], 0xcc66cc);
trojkaty[7] = new Triangle(punkty[3], punkty[6], punkty[7], 0xcc66cc);
// right
trojkaty[8] = new Triangle(punkty[1], punkty[5], punkty[6], 0x66cccc);
trojkaty[9] = new Triangle(punkty[1], punkty[6], punkty[2], 0x66cccc);
// left
trojkaty[10] = new Triangle(punkty[4], punkty[0], punkty[3], 0xcccc66);
trojkaty[11] = new Triangle(punkty[4], punkty[3], punkty[7], 0xcccc66);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void
{
var angleX:Number = (mouseY - vpY) * .001;
var angleY:Number = (mouseX - vpX) * .001;
for(var i:uint = 0; i < punkty.length; i++)
{
var punkt:Point3D = punkty[i];
punkt.rotateX(angleX);
punkt.rotateY(angleY);
}
graphics.clear();
for(i = 0; i < trojkaty.length; i++)
{
trojkaty[i].draw(graphics);
}
}
}
}
//KOD DLA KLASY Point3D.as
package
{
public class Point3D
{
public var fl:Number = 250;
private var vpX:Number = 0;
private var vpY:Number = 0;
private var cX:Number = 0;
private var cY:Number = 0;
private var cZ:Number = 0;
public var x:Number = 0;
public var y:Number = 0;
public var z:Number = 0;
public function Point3D(x:Number=0, y:Number=0, z:Number=0)
{
this.x = x;
this.y = y;
this.z = z;
}
public function setVanishingPoint(vpX:Number, vpY:Number):void
{
this.vpX = vpX;
this.vpY = vpY;
}
public function setCenter(cX:Number, cY:Number, cZ:Number=0):void
{
this.cX = cX;
this.cY = cY;
this.cZ = cZ;
}
public function get screenX():Number
{
var scale:Number = fl / (fl + z + cZ);
return vpX + (cX + x) * scale;
}
public function get screenY():Number
{
var scale:Number = fl / (fl + z + cZ);
return vpY + (cY + y) * scale;
}
public function rotateX(angleX:Number):void
{
var cosX:Number = Math.cos(angleX);
var sinX:Number = Math.sin(angleX);
var y1:Number = y * cosX - z * sinX;
var z1:Number = z * cosX + y * sinX;
y = y1;
z = z1;
}
public function rotateY(angleY:Number):void
{
var cosY:Number = Math.cos(angleY);
var sinY:Number = Math.sin(angleY);
var x1:Number = x * cosY - z * sinY;
var z1:Number = z * cosY + x * sinY;
x = x1;
z = z1;
}
public function rotateZ(angleZ:Number):void
{
var cosZ:Number = Math.cos(angleZ);
var sinZ:Number = Math.sin(angleZ);
var x1:Number = x * cosZ - y * sinZ;
var y1:Number = y * cosZ + x * sinZ;
x = x1;
y = y1;
}
}
}
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
public class Kostak3D extends Sprite
{
private var punkty:Array;
private var trojkaty:Array;
private var fl:Number = 250;
private var vpX:Number = stage.stageWidth / 2;
private var vpY:Number = stage.stageHeight / 2;
public function Kostka3D()
{
init();
}
private function init():void
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
punkty = new Array();
// front four corners
punkty[0] = new Point3D(-100, -100, -100);
punkty[1] = new Point3D( 100, -100, -100);
punkty[2] = new Point3D( 100, 100, -100);
punkty[3] = new Point3D(-100, 100, -100);
// back four corners
punkty[4] = new Point3D(-100, -100, 100);
punkty[5] = new Point3D( 100, -100, 100);
punkty[6] = new Point3D( 100, 100, 100);
punkty[7] = new Point3D(-100, 100, 100);
for(var i:uint = 0; i < punkty.length; i++)
{
punkty[i].setVanishingPoint(vpX, vpY);
punkty[i].setCenter(0, 0, 200);
}
trojkaty = new Array();
// front
trojkaty[0] = new Triangle(punkty[0], punkty[1], punkty[2], 0x6666cc);
trojkaty[1] = new Triangle(punkty[0], punkty[2], punkty[3], 0x6666cc);
// top
trojkaty[2] = new Triangle(punkty[0], punkty[5], punkty[1], 0x66cc66);
trojkaty[3] = new Triangle(punkty[0], punkty[4], punkty[5], 0x66cc66);
//back
trojkaty[4] = new Triangle(punkty[4], punkty[6], punkty[5], 0xcc6666);
trojkaty[5] = new Triangle(punkty[4], punkty[7], punkty[6], 0xcc6666);
// bottom
trojkaty[6] = new Triangle(punkty[3], punkty[2], punkty[6], 0xcc66cc);
trojkaty[7] = new Triangle(punkty[3], punkty[6], punkty[7], 0xcc66cc);
// right
trojkaty[8] = new Triangle(punkty[1], punkty[5], punkty[6], 0x66cccc);
trojkaty[9] = new Triangle(punkty[1], punkty[6], punkty[2], 0x66cccc);
// left
trojkaty[10] = new Triangle(punkty[4], punkty[0], punkty[3], 0xcccc66);
trojkaty[11] = new Triangle(punkty[4], punkty[3], punkty[7], 0xcccc66);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void
{
var angleX:Number = (mouseY - vpY) * .001;
var angleY:Number = (mouseX - vpX) * .001;
for(var i:uint = 0; i < punkty.length; i++)
{
var punkt:Point3D = punkty[i];
punkt.rotateX(angleX);
punkt.rotateY(angleY);
}
graphics.clear();
for(i = 0; i < trojkaty.length; i++)
{
trojkaty[i].draw(graphics);
}
}
}
}
//KOD DLA KLASY Point3D.as
package
{
public class Point3D
{
public var fl:Number = 250;
private var vpX:Number = 0;
private var vpY:Number = 0;
private var cX:Number = 0;
private var cY:Number = 0;
private var cZ:Number = 0;
public var x:Number = 0;
public var y:Number = 0;
public var z:Number = 0;
public function Point3D(x:Number=0, y:Number=0, z:Number=0)
{
this.x = x;
this.y = y;
this.z = z;
}
public function setVanishingPoint(vpX:Number, vpY:Number):void
{
this.vpX = vpX;
this.vpY = vpY;
}
public function setCenter(cX:Number, cY:Number, cZ:Number=0):void
{
this.cX = cX;
this.cY = cY;
this.cZ = cZ;
}
public function get screenX():Number
{
var scale:Number = fl / (fl + z + cZ);
return vpX + (cX + x) * scale;
}
public function get screenY():Number
{
var scale:Number = fl / (fl + z + cZ);
return vpY + (cY + y) * scale;
}
public function rotateX(angleX:Number):void
{
var cosX:Number = Math.cos(angleX);
var sinX:Number = Math.sin(angleX);
var y1:Number = y * cosX - z * sinX;
var z1:Number = z * cosX + y * sinX;
y = y1;
z = z1;
}
public function rotateY(angleY:Number):void
{
var cosY:Number = Math.cos(angleY);
var sinY:Number = Math.sin(angleY);
var x1:Number = x * cosY - z * sinY;
var z1:Number = z * cosY + x * sinY;
x = x1;
z = z1;
}
public function rotateZ(angleZ:Number):void
{
var cosZ:Number = Math.cos(angleZ);
var sinZ:Number = Math.sin(angleZ);
var x1:Number = x * cosZ - y * sinZ;
var y1:Number = y * cosZ + x * sinZ;
x = x1;
y = y1;
}
}
}
Dodano przez: divix
Ranga: Administrator serwisu Punktów: 0
Ranga: Administrator serwisu Punktów: 0
Komentarze użytkowników
:: Losowe artykuły
:: Wymiana linków
Modowe inspiracje |
Android Gry i Aplikacje |
ZaplanujTransport.pl: Przeprowadzki, transport, aukcje |
Logo dla firmy |
Change Tires - Car Weather Forecast Reminder |
Laminas: MVC Framework for PHP |
IT Books Reviews and Programming: JS, JAVA, PHP, ANDROID, CSS |
Katalog roślin |
Programming articles: JAVA, PHP, C++, Python, JavaScript |
Kancelaria Adwokacka Łukasz Huszno