Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   object_click и Collada (papervision) (http://www.flasher.ru/forum/showthread.php?t=120368)

myocean 18.01.2009 20:43

object_click и Collada (papervision)
 
Доброго времени суток,

продолжая изуть движок от papervision столкнулся со следующей проблемой... при добавлении интерактивности в сцену...
пример:

Код AS3:

cube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onPress);

все рабоает, но вот вопрос, как сделать кликабельным collada объект,
тупо collada.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onPress); не выходит... :(

И еще вопрос, как можно поместить слой над объектом papervision...

Obi 18.01.2009 20:56

Читать документацию.

myocean 18.01.2009 21:02

По документации разобраться не могу, а может не там читаю ... так как еще новичок в этом вопросе...
я так понимаю нужно вытащить так сказать кликабельный объект из коллады, но как это сделать не пойму...
есть примеры, для работы с подобъектами, скажем focus или little planet, но примеры уже устаревшие, сейчас есть изменение в движке... поменялся соответственно и код...

И что значит перерегистрироваться, и зачем?

Obi 18.01.2009 21:10

Код AS3:

object.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onObjectClick);
 
private function onObjectClick(event:InteractiveScene3DEvent):void {
  trace('click!');
}

Так не работает?
interactive = true материалам выставили?

myocean 18.01.2009 21:13

Спасибо Obi, но так не работает, проблема так понимаю в
object.addEventListener...

Как его определить,
как вытащить из colladы
(интерактив материалы выставил)

Добавлено через 7 минут
вот весть код

Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.Event;
 
        import org.papervision3d.view.Viewport3D;
        import org.papervision3d.scenes.Scene3D;
        import org.papervision3d.cameras.Camera3D;
        import org.papervision3d.materials.BitmapAssetMaterial;
        import org.papervision3d.materials.utils.MaterialsList;
        import org.papervision3d.objects.parsers.Collada;
        import org.papervision3d.render.BasicRenderEngine;
        import org.papervision3d.events.InteractiveScene3DEvent;
        import org.papervision3d.objects.primitives.Plane;
        import org.papervision3d.objects.DisplayObject3D;
        import org.papervision3d.materials.ColorMaterial;
 
    import org.papervision3d.typography.Text3D;
        public class PV3D extends Sprite
        {
                private var viewport:                        Viewport3D;
                private var scene:                                Scene3D;
                private var camera:                                Camera3D;
                private var collada:                        Collada;
                private var plane:                            Plane;
                private var mesh:              DisplayObject3D;
                private var mesh2:              DisplayObject3D;
                private var materialSpace:      ColorMaterial;
                private var renderer:                        BasicRenderEngine;
                private var mCube:                            BitmapAssetMaterial;
 
 
 
                public function PV3D():void
                {
                        viewport = new Viewport3D(600, 600, false, true);
                        addChild(viewport);
 
                        scene = new Scene3D();
 
                        camera = new Camera3D();
 
 
                        materialSpace = new ColorMaterial( 0xFFFFFF, 1 );
                        materialSpace.interactive = true; 
                        plane = new Plane( materialSpace, 800, 800, 10, 10 );
                        plane.rotationX = 90;
                        plane.y =- 125;
                        scene.addChild(plane);
 
 
 
                        renderer = new BasicRenderEngine();
 
 
                        mCube =new BitmapAssetMaterial( "cube.jpg", 0.1 );
                        mCube.interactive = true; 
 
 
 
                        var materialsList:MaterialsList = new MaterialsList();
                        materialsList.addMaterial( mCube, "mCube" );
                        collada = new Collada("modelcube.dae", materialsList, .2);
                        scene.addChild(collada);
                        camera.target = collada;
 
 
                        addEventListener(Event.ENTER_FRAME, onEnterFrame);
                        plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onPress);
                        collada.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onObjectClick);
 
 
 
                        function onEnterFrame(e:Event):void
                        {
                                var xDist:Number = mouseX - stage.stageWidth * 0.5;
                                var yDist:Number = mouseY - stage.stageHeight * 0.5;
 
                                camera.x -= (camera.x - Math.sin(mouseX*0.01)*1000) /8;
                                camera.z -= 100+(camera.z - Math.cos(mouseX*0.01)*1000) /8;
                                camera.y -= (camera.y - viewport.containerSprite.mouseY * 5) /8;
 
                                renderer.renderScene(scene, camera, viewport);
                        }
                        function onObjectClick(event:InteractiveScene3DEvent):void {
                                        trace('click2!');
                        }
 
                        function onPress(e:InteractiveScene3DEvent):void
                        {
                        trace("click");
                        txt.x = 100;
 
                        }
 
                }
        }
}


iNils 18.01.2009 21:42

myocean, для оформления своего кода надо использовать теги [code][/code].


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

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