2014-07-17 39 views
0

我只是想获得鼠标在飞机上的坐标,但鼠标事件不会触发。Away3d网格没有得到mouseClick事件

我也有一个star3实例在away3顶部,我得到了this tutorial,我相信那里有问题。 这里是我的代码:

public class Main extends Sprite 
{ 

    private var view3D:View3D; 
    private var stage3DManager:Stage3DManager; 
    private var stage3DProxy:Stage3DProxy; 

    public function Main():void 
    { 
     if (stage) 
      init(); 
     else 
      addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

    private function init(e:Event = null):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, init); 
     // entry point 

     view3D = new View3D(); 

     initProxies(); 
    } 

    private function initProxies():void 
    { 
     stage3DManager = Stage3DManager.getInstance(stage); 

     stage3DProxy = stage3DManager.getFreeStage3DProxy(); 
     stage3DProxy.addEventListener(Stage3DEvent.CONTEXT3D_CREATED, onContextCreated); 
    } 

    private function onContextCreated(event:Stage3DEvent):void 
    { 
     initAway3D(); 
     initStarling(); 

     var floor:Mesh = new Mesh(new PlaneGeometry(600, 400), new ColorMaterial(0x530000)); 
     floor.mouseEnabled = true; 
     view3D.scene.addChild(floor); 

     addEventListener(Event.ENTER_FRAME, onEnterFrame); 
     floor.addEventListener(MouseEvent3D.CLICK, onClick); 

    } 

    private function onClick(e:MouseEvent3D):void 
    { 
     trace("Click"); 
    } 

    private function initAway3D():void 
    { 

     view3D.stage3DProxy = stage3DProxy; 
     view3D.shareContext = true; 

     addChild(view3D); 

     view3D.mousePicker = PickingType.SHADER; 

     view3D.camera = new Camera3D(new OrthographicLens()); 
     view3D.camera.x = 1000; 
     view3D.camera.y = 1000; 
     view3D.camera.z = 1000; 
     view3D.camera.lookAt(new Vector3D(0, 0, 0)); 
    } 

    private function initStarling():void 
    { 
     var starling:Starling = new Starling(StarlingSprite, stage, stage3DProxy.viewPort, stage3DProxy.stage3D); 
     starling.showStats = true; 
     starling.start(); 
    } 

    private function onEnterFrame(e:Event):void 
    { 
     stage3DProxy.clear(); 

     view3D.render(); 

     stage3DProxy.present(); 
    } 

} 

}

回答

0

我工作的一个小项目,我根据这本教程,和一切工作正常! 我有羽毛的问题,但我解决它,当我打电话starling.start()这是不是在本教程中,但你已经做到了:)

试试这个:

private function initStarling():void 
{ 
    starling = new Starling(StarlingSprite, stage, stage3DProxy.viewPort, stage3DProxy.stage3D); 
    starling.addEventListener(Event.ROOT_CREATED, rootCreatedHandler); 
} 

private function rootCreatedHandler(event:Event):void 
{ 
    starling.removeEventListener(Event.ROOT_CREATED, rootCreatedHandler); 

    stage3DProxy.addEventListener(flash.events.Event.ENTER_FRAME, onEnterFrame); 

    starling.start(); 
} 

private function onEnterFrame(event:flash.events.Event):void 
{ 
    view3D.render(); 

    starling.nextFrame(); 
} 

我希望它能帮助你!