flash 3d flash3d 研究所 pv3d
登陆 | 注册  flash 3d 研究所
教程区





最近更新:
● fool_tiger阁下在讨论区里 回复“旋转摄像机的问题...”(09:40:55)
● fool_tiger阁下在讨论区里 回复“旋转摄像机的问题...”(09:19:42)
● webbise阁下在讨论区里 回复“交换链接...”(23:30:47)
正在浏览教程: 《超简易papervision3D基础 第九篇 鼠标手型和更换贴图》
《超简易papervision3D基础 第九篇 鼠标手型和更换贴图》
DDM君 , Flab3D.com (允许转载,转载请注明)

这两个功能可能是在下最常常听到的需要。所以这次就用一个例子来就讲解这两个方面的思路。







原理解释
非常的可惜的是Pv3d本身并不像away3d有简单可以出现手型鼠标的办法,所以必须靠程序上使点巧来达到目的。
换贴图方面倒是非常简单的一件事情。因为每个DisplayObject都有set material这个方法。他接受任何MaterialObject3D


这次我们制作两个平面,一个上面有个按钮,但只有鼠标到按钮时,才变成手型鼠标。点击后会切换另一个平面上的贴图。
点击这里下载源代码

代码解释
读取外部btn.jpg作为按钮,当鼠标经过按钮的时候,把整个plane1变为一个sprite图层,并变成可以让鼠标显示手型buttonMode=true, 当鼠标离开的时候,让整个plane1变得不能显示手型。
loader.load(new URLRequest("btn.jpg"));
loader.addEventListener(MouseEvent.CLICK,onInter1);
loader.addEventListener(MouseEvent.MOUSE_OVER,onInter2);
loader.addEventListener(MouseEvent.MOUSE_OUT,onInter3);
public function onInter2(evt:MouseEvent):void {
viewport.getChildLayer(plane1).buttonMode=true;
}
public function onInter3(evt:MouseEvent):void {
viewport.getChildLayer(plane1).buttonMode=false;
}

mc1是一个movieClip,为了作mm的第一个参数。mm是一个可以使用movieClip的贴图,具体申明参数方法参考《贴图,更深一点》
private var mc1:MovieClip=new MovieClip();
mm=new MovieMaterial(mc1,true,true);

这句是让贴图平滑显示,但是平滑贴图会大大降低运行效率,除非是很少的面,很小的贴图,或必须使用的时候才使用。
mm.smooth=true;

给mc1随便画一个背景
mc1.graphics.beginFill(0xDDDDDD);
mc1.graphics.drawRect(0, 0, 500, 500);
mc1.graphics.endFill();

把按钮加入mc1
mc1.addChild(loader);
loader.x=loader.y=50;
loader.scaleX=loader.scaleY=2;
           

点击换一个贴图,再点击换回来。
public function onInter1(evt:MouseEvent):void {
if(isFront){
plane2.material=mp2;
isFront=false;
}
else{
plane2.material=mp1;
isFront=true;
}
}

不要忘记倒入这次需要的mc贴图类
import org.papervision3d.materials.MovieMaterial;


当然我们具体制作中仍然会遇到很多问题,多多思考慢慢就会熟悉各种相关制作。有什么心得都欢迎给我们分享,有问题欢迎去讨论区。 加油~




DDM君
Flab3D.com



Flash3d研究所推荐的Pv3d傻瓜包下载
下载源代码



kyoichi886
(2008-12-23 13:20:51)
非常感谢您提供的思路。
Justin
(2009-01-06 10:23:32)
不错不错,这个思路不错,谢谢~~
Gabriel
(2009-04-01 12:41:51)
但是以前的影片元件中的按钮功能无法使用了?
gamefriends
(2009-04-10 17:27:45)
谢谢,终于找到思路了,感谢中


jeff
(2009-05-13 17:12:16)
我效果是出来了,但是贴图明显和你贴出来的大小不一样。。。。参数什么我都照你的设置的
jeff
(2009-05-13 17:16:41)
我编译你的包出来也是同样的效果。。。郁闷了
jeff
(2009-05-13 17:18:28)
图片没显示完整,两边图片都占满了plane。。。

(2009-05-31 17:18:26)
如果是导入的dae模型呢,如何给每个面加交互呢?
南湖逍遥子
(2009-06-18 12:02:42)
每个面交互。。。
netsnower
(2009-07-12 13:42:02)
请问立方体如何更换某个面的贴图?
小海龟
(2009-07-28 15:27:33)
学习

(2009-10-26 10:15:54)
DDM君,PV3D里面怎么添加键盘的监听事件啊,我怎么看到的都是鼠标事件
InteractiveScene3DEvent这个类里面也全部是鼠标的事件

(2009-11-03 16:42:51)
loader.x = loader.y = 50;
mc1.scaleX = mc1.scaleY = 2;
fan
(2009-12-01 10:38:41)
如何给导入的dae模型添加交互
AT
(2009-12-03 06:23:05)
幹!!! 有你們真的太好了!!!!!!!!!!!!!!!!!!!

真的真的 萬分感謝!!!!!!!!!!!!!!!!!!!!!!!!!
Aaron
(2010-02-04 10:07:42)
楼主,这篇可以更新下,现在可以用viewport.buttonMode = true;
来改变鼠标手型了~

评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容:
链接地址
(广告和垃圾内容可能会被删除,望理解)