Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Papervision] InteractiveMovieMaterial (http://www.flasher.ru/forum/showthread.php?t=123738)

ktotam 02.05.2010 16:10

Вложений: 1
Здравствуйте! Схожая, точнее идентичная проблема, но никак не получается сней разобраться.
Код AS3:

package {
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.geom.Point;
        import flash.ui.Mouse;
        import flash.display.Sprite;
        import flash.display.MovieClip;
        import flash.display.Loader;
        import flash.net.URLRequest;
        import org.papervision3d.view.Viewport3D;
        import org.papervision3d.scenes.Scene3D;
        import org.papervision3d.cameras.Camera3D;
        import org.papervision3d.materials.MovieMaterial;
        import org.papervision3d.objects.primitives.*;
        import org.papervision3d.render.BasicRenderEngine;
 
        public class PV3DSphere extends Sprite {
                private var viewport:Viewport3D;
                private var scene:Scene3D;
                private var camera:Camera3D;
                private var Material:MovieMaterial;
                private var sphere:Sphere;
                private var render:BasicRenderEngine;
                private var l:Loader;
                private var czoom;
                private var rotationYStart;
                private var rotationXStart;
                private var startPoint:Point;
                private var sphere_radius;
                private var poke:Poke;
 
 
                public function PV3DSphere():void {
                        l=new Loader();
                        l.load(new URLRequest("pano.swf"));
                        l.contentLoaderInfo.addEventListener(Event.COMPLETE,init)
                }
                private function init(e:Event):void {
                        viewport=new Viewport3D(stage.stageWidth ,stage.stageHeight);
                        addChild(viewport);
                        scene = new Scene3D();
                        camera = new Camera3D();
                        render = new BasicRenderEngine();
                        poke=new Poke()
                        setdecor()
                }
                private function setdecor():void {
                        Material=new MovieMaterial(l)
                        Material.doubleSided=true
                        sphere_radius=stage.width/2
                        sphere=new Sphere(Material,sphere_radius,30,30);
                        sphere.x=sphere.y=sphere.z=0
                        scene.addChild(sphere);
                        camera.x=camera.y=camera.z=0
                        czoom=0;
                        rotationYStart=0
                        rotationXStart=0
                        camera.rotationX=camera.rotationY=0
                        renderer()
                        this.addEventListener(MouseEvent.MOUSE_WHEEL, mzoom);
                        this.addEventListener(MouseEvent.CLICK, clickHandler);
                        this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
                        this.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
                        this.addEventListener(MouseEvent.MOUSE_OUT, mouseUpHandler);
                        this.addEventListener(Event.MOUSE_LEAVE, mouseUpHandler);
 
 
                }
                private function clickHandler(event:MouseEvent):void {
                        dispatchEvent(new Event("doSomething"));       
                }
                private function mouseDownHandler(event:MouseEvent):void {
                        startPoint = new Point(stage.mouseX,stage.mouseY);
                        rotationYStart = camera.rotationY;
                        rotationXStart = camera.rotationX;
                        this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMovie);
                        renderer()
 
                }
                private function mouseUpHandler(event:MouseEvent):void {
                        this.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMovie);
                }
                private function mouseMovie(event:MouseEvent):void {
                        camera.rotationY = rotationYStart +(180/Math.PI*Math.acos(1-startPoint.x/sphere_radius)-180/Math.PI*Math.acos(1-stage.mouseX/sphere_radius))/(camera.zoom/40)
                        camera.rotationX = rotationXStart +(180/Math.PI*Math.acos(1-startPoint.y/sphere_radius)-180/Math.PI*Math.acos(1-stage.mouseY/sphere_radius))/(camera.zoom/40)
                        if(camera.rotationX > 60){camera.rotationX= 60 }
                        if(camera.rotationX <-60){camera.rotationX=-60 }
                        renderer()
                }
 
                private function mzoom(event:MouseEvent):void {
                        camera.zoom+=event.delta*2
                        if(camera.zoom>100){camera.zoom=100}
                        if(camera.zoom<40){camera.zoom=40}
                        renderer()
            }
                private function renderer():void {
                        render.renderScene(scene, camera, viewport);
                }
        }
}

Здесь я добавляю прослушку на клик -
Код AS3:

this.addEventListener(MouseEvent.CLICK, clickHandler);

А здесь создаю свой вещатель (если не ошибаюсь)
Код AS3:

private function clickHandler(event:MouseEvent):void {
        dispatchEvent(new Event("doSomething"));       
}

В качестве MovieMaterial использую SWF "pano.swf" с следующим кодом:
Код AS3:

package  
{
        import flash.display.MovieClip;
        import flash.ui.Mouse;       
        import flash.events.MouseEvent;
        import flash.events.Event;
        public class Pano extends MovieClip
        {
                var mouseptr:MovieClip = new door();
                public function Pano() {                       
                        addChild(mouseptr);
                        mouseptr.x=200
                        mouseptr.y=200
                        mouseptr.addEventListener(MouseEvent.CLICK, clickHandler);
                        mouseptr.addEventListener("doSomething", MouseClickBut);
                }
 
                public function clickHandler(e:MouseEvent) {
                        mouseptr.visible=false;
                }
                private function MouseClickBut(event:Event):void{
                        mouseptr.visible=false;
                }
        }
}

Клик не срабатывает, подскажите почему?
Вложение 24352


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

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