pv3d 学习笔记-交互部分

7 篇文章 0 订阅
 

1.Interactivity 交互
    在3D 场景中尼可以使用下面两种类型的鼠标交互
    通过材质
    通过一个3D 对象


要与材质或者3D 对象进行鼠标交互必须先设置viewport 的interactive 属性为true。Viewport 的interactive
属性默认为false。viewport.interactive = true;如果类是继承自BasicView,那么也可以通过下面的方法来实现:
super(640,480,false,true);
请一定要在startRendering()方法执行前,先条用super()方法。
还有一种方法,就是在创建一个Viewport3D 对象时,用参数来指定:
var viewport:Viewport3D = new Viewport3D(640,480,false,true);

为了能通过材质进行交互,必须将材质的interactive 属性设为true:material.interactive = true;所有的材质
类型都有这个属性


2.材质交互(Material interactivity)

    如:

    private function init():void{
        viewport.interactive = true;
                
        var material:MovieAssetMaterial = new MovieAssetMaterial("material",false,true,false,true);
        material.doubleSided = true;
        material.rect = new Rectangle(0,0,200,200);
        material.smooth = true;
        material.precisionMode = PrecisionMode.STABLE;
        material.interactive = true;
        
        MovieClip(MovieClip(material.movie).getChildByName("btn")).mouseChildren = false;
        MovieClip(material.movie).getChildByName("btn").addEventListener(MouseEvent.CLICK,click);
        MovieClip(material.movie).getChildByName("btn").addEventListener(MouseEvent.MOUSE_OVER,mouseOver);
        MovieClip(material.movie).getChildByName("btn").addEventListener(MouseEvent.MOUSE_OUT,mouseOut);        

        plane = new Plane(material,500,500);
        scene.addChild(plane);
    }

    private function click(e:MouseEvent):void
    {
        var buttonText:TextField = MovieClip(e.target).getChildByName("label") as TextField;
        switch(buttonText.text)
        {
            case "start":
                buttonText.text = "stop";
                MovieClip( MovieClip(e.target).parent ).play();
            break;
            default:
                buttonText.text = "start";
                MovieClip( MovieClip(e.target).parent ).stop();
        }
    }
    
    private function mouseOver(e:MouseEvent):void
    {
        viewport.buttonMode = true;
    }
    
    private function mouseOut(e:MouseEvent):void
    {
        viewport.buttonMode = false;
    }



3.除了材质交互,我们还有物体对象交互,这个在我们想要对整个物体进行交互时就会很有用。可以向3D
物体添加事件侦听然后就等待响应了

private function init():void{    
    viewport.interactive = true;
    
    var material:ColorMaterial = new ColorMaterial();
    material.doubleSided = true;
    material.interactive = true;

    var plane:Plane = new Plane(material);
    //添加交互事件
    plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,click);
    scene.addChild(plane);
}

private function click(e:InteractiveScene3DEvent):void{
    e.displayObject3D.localRotationY +=12;
}


do3D会发出如下事件:
   InteractiveScene3DEvent.OBJECT_ADDED
 InteractiveScene3DEvent.OBJECT_CLICK
 InteractiveScene3DEvent.OBJECT_DOUBLE_CLICK
 InteractiveScene3DEvent.OBJECT_MOVE
 InteractiveScene3DEvent.OBJECT_OUT
 InteractiveScene3DEvent.OBJECT_OVER
 InteractiveScene3DEvent.OBJECT_PRESS
 InteractiveScene3DEvent.OBJECT_RELEASE
 InteractiveScene3DEvent.OBJECT_RELEASE_OUTSIDE

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值