Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Добавление 3D на MovieClip (http://www.flasher.ru/forum/showthread.php?t=156326)

necrommx 19.05.2011 21:15

Добавление 3D на MovieClip
 
Вложений: 1
Добрый вечер, интересует такой вопрос как добавить 3D объект в определённое место на сцене.
Т.е есть movie clip и в нём ещё 2 movie клипа, в movie clip 1 должна быть интерактивная часть, при наведении мыши в movie clip 2 должно выводится сообщение, как такое реализовать не совсем понятно, подскажите кто знает.
Пример во вложении.
Исходник кода вот. Использую движок PV3D
Код AS3:

package
{
        import flash.geom.Rectangle;
        import flash.events.*;
        import flash.ui.Keyboard;
        import org.papervision3d.cameras.CameraType;
        import org.papervision3d.events.InteractiveScene3DEvent;
        import org.papervision3d.materials.ColorMaterial;
        import org.papervision3d.objects.primitives.Plane;
        import org.papervision3d.view.BasicView;
        import org.papervision3d.objects.DisplayObject3D;
 
 
        [SWF(width="512", height="576")]
        public class BookContent extends BasicView
        {
                public var keyForward:Boolean;
                public var keyBackward:Boolean;
                public var keyLeft:Boolean;
                public var keyRight:Boolean;
 
                private var isOribiting:Boolean = false;
                private var cameraPitch:Number = 90;
                private var cameraYaw:Number = 270;
                private var cameraTarget:DisplayObject3D = DisplayObject3D.ZERO;
                private var differenceX:Number = 0;
                private var differenceY:Number = 0;
 
                public function BookContent ()
                {
                        super(512,576,true,false,CameraType.FREE);
                        addEventListener(Event.ADDED_TO_STAGE,initCameraControll);
                        //initCameraControll();
 
                        //camera.x = 400;
                        //camera.y = 400;
 
 
                        init ();
                        startRendering ();
 
                }
                private function init ():void
                {
                        viewport.interactive = true;
 
                        for (var i:int=0; i < 20; i++)
                        {
                                var plane_mat = new ColorMaterial(Math.random() * 0xFFFFFF);
                                plane_mat.smooth = true;
                                plane_mat.doubleSided = true;
                                plane_mat.interactive = true;
 
                                var plane_obj = new Plane(plane_mat,200,200,1,1);
                                plane_obj.addEventListener (InteractiveScene3DEvent.OBJECT_OVER , doInteractions);
                                plane_obj.x = Math.random() * 800 - 400;
                                plane_obj.y = Math.random() * 800 - 400;
                                plane_obj.z = Math.random() * 800 - 400;
                                scene.addChild (plane_obj);
                        }                       
                }
                private function doInteractions (e:InteractiveScene3DEvent):void
                {
                        camera.target = e.displayObject3D;
                }
 
                override protected function onRenderTick (event:Event = null):void
                {
                        moveCamera ();                       
                        super.onRenderTick ();
                }
 
                // Управление Камерой
                private function initCameraControll (event:Event):void
                {
                        stage.addEventListener (KeyboardEvent.KEY_DOWN, keyDownHandler);
                        stage.addEventListener (KeyboardEvent.KEY_UP, keyUpHandler);
                }
 
                private function keyDownHandler (e:KeyboardEvent):void
                {
                        switch (e.keyCode)
                        {
                                case "W".charCodeAt() :                               
                                        keyForward = true;
                                        break;
                                case "S".charCodeAt() :                               
                                        keyBackward = true;
                                        break;
                                case "A".charCodeAt() :                               
                                        keyLeft = true;
                                        break;
                                case "D".charCodeAt() :                               
                                        keyRight = true;
                                        break;
                        }
                }
                private function keyUpHandler (e:KeyboardEvent):void
                {
                        switch (e.keyCode)
                        {
                                case "W".charCodeAt() :                               
                                        keyForward = false;
                                        break;
                                case "S".charCodeAt() :                               
                                        keyBackward = false;
                                        break;
                                case "A".charCodeAt() :                               
                                        keyLeft = false;
                                        break;
                                case "D".charCodeAt() :                               
                                        keyRight = false;
                                        break;
                        }
                }
                private function moveCamera ():void
                {
                        if (keyForward)
                        {
                                //camera.zoom += 1;
                                camera.moveForward (30);
                        }
                        else if (keyBackward)
                        {
                                //camera.zoom -= 1;
                                camera.moveBackward (30);
                                //if ( camera.scaleZ == 100 || camera.scaleZ == -100)
                                        //camera.scaleZ = 0;
                                //else
                                        //camera.moveBackward (30);
                        }
                        if (keyRight)
                        {
                                isOribiting = true;
                                differenceX = stage.x + 1;
                                //camera.moveRight (5);
                                //camera.localRotationY+=1;
                        }
                        else if (keyLeft)
                        {
                                isOribiting = true;
                                differenceX = stage.x - 1;
 
                                //camera.moveLeft (5);
                                //camera.localRotationY -= 1;
 
                        }
                        if (isOribiting) {
                                cameraYaw += differenceX;                               
                                cameraPitch += differenceY;
 
                                cameraPitch %= 360;
                                cameraYaw %= 360;
                                cameraPitch = cameraPitch > 0 ? cameraPitch : 0.0001;
                                cameraPitch = cameraPitch < 90 ? cameraPitch : 89.9999;
 
                                camera.orbit(cameraPitch, cameraYaw, true, cameraTarget);
                                isOribiting = false;
                        }
 
                }
        }
}

И ещё один вопрос, как ограничить приближении камеры, т.е методы moveBackward (Forward )


Часовой пояс GMT +4, время: 02:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.