Loading:


    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:

     



    Napisz Artyku³

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




    Dodano przez: divix
    Ranga: Administrator serwisu Punktów: 0
    Komentarze użytkowników
      • Tre¶æ komentarza
        Kod do komentarza (opcjonalnie)
        PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
        Autor
        Token
        token

         

         








    funkcje.net
    Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2025 v.1.5 | design: diviXdesign & rainbowcolors