快速导航:   教程资源  | 经典范例  | 友情链接  | 联系我们  | 官方微博
登陆 | 注册

 flash 3d 研究所
flash3d 研究所 pv3d 教程 研究所小贴士: 完美的旋转要用到痛苦的四元数










最近更新:
● Aberumnomug阁下在讨论区里 发表新主题“Казино Онлайн Честно...”(18:31:07)
● DonaldHaing阁下在讨论区里 发表新主题“Бк Фонбет зеркало са...”(13:47:47)
● Aberumnomug阁下在讨论区里 发表新主题“Играть В Крейзи Манк...”(05:48:59)
浏览主题:《超简易papervision3D基础 第九篇 鼠标手型和更换贴图》

《超简易papervision3D基础 第九篇 鼠标手型和更换贴图》
DDM君 (2012-03-16 05:50:40)

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傻瓜包下载
下载源代码







flash 3d 研究所
(2008-12-23 13:20:51)
非常感谢您提供的思路。


flash 3d 研究所
(2009-01-06 10:23:32)
不错不错,这个思路不错,谢谢~~


flash 3d 研究所
(2009-04-01 12:41:51)
但是以前的影片元件中的按钮功能无法使用了?


flash 3d 研究所
(2009-04-10 17:27:45)
谢谢,终于找到思路了,感谢中




flash 3d 研究所
(2009-05-13 17:12:16)
我效果是出来了,但是贴图明显和你贴出来的大小不一样。。。。参数什么我都照你的设置的


flash 3d 研究所
(2009-05-13 17:16:41)
我编译你的包出来也是同样的效果。。。郁闷了


flash 3d 研究所
(2009-05-13 17:18:28)
图片没显示完整,两边图片都占满了plane。。。


flash 3d 研究所
(2009-05-31 17:18:26)
如果是导入的dae模型呢,如何给每个面加交互呢?


flash 3d 研究所
(2009-06-18 12:02:42)
每个面交互。。。


flash 3d 研究所
(2009-07-12 13:42:02)
请问立方体如何更换某个面的贴图?


flash 3d 研究所
(2009-07-28 15:27:33)
学习


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


flash 3d 研究所
(2009-11-03 16:42:51)
loader.x = loader.y = 50;
mc1.scaleX = mc1.scaleY = 2;


flash 3d 研究所
(2009-12-01 10:38:41)
如何给导入的dae模型添加交互


flash 3d 研究所
(2009-12-03 06:23:05)
幹!!! 有你們真的太好了!!!!!!!!!!!!!!!!!!!

真的真的 萬分感謝!!!!!!!!!!!!!!!!!!!!!!!!!


flash 3d 研究所
(2010-02-04 10:07:42)
楼主,这篇可以更新下,现在可以用viewport.buttonMode = true;
来改变鼠标手型了~


flash 3d 研究所
(2010-12-20 00:17:57)
private var isFront:Boolean=true;
if(isFront){
plane2.material=mp2;
isFront=false;
}
大大 我想問這段程式碼.....
在這裡的isFront你一開始定義的她只是一個等於true的布林值
那為什麼到isFront=false時他可以找到是plane2等於false呢??
我看不懂的地方在於,看起來你並沒有第一isFront是哪個平面
但是他卻抓的到.......


flash 3d 研究所
(2011-04-02 15:16:08)
我也想知道,如何给导入的dae或xml模型添加交互
car = new Collada("car.xml",new MaterialsList({all:(mp1)}));
可是点击后,模型贴图不变


flash 3d 研究所
(2011-08-01 14:18:04)
这个思路的确很不错哟


flash 3d 研究所
(2012-02-29 14:48:28)
camera.moveForward(550);

loader.x=loader.y=50;
loader.scaleX=loader.scaleY=1;
                 
mc1.x = mc1.y = 50;
mc1.scaleX = mc1.scaleY = 1;


flash 3d 研究所
(2012-02-29 14:57:30)
camera.moveForward(550);

loader.x=loader.y=50;
//loader.scaleX=loader.scaleY=1;

//mc1.x=mc1.y=50;
mc1.scaleX = mc1.scaleY = 2;


flash 3d 研究所
(2012-03-14 08:12:36)
你好 我使用的是CS5.5,下载完傻瓜包和源文件以后 测试的影片 窗口不变,内容变大,看不到了,这是怎么回事?而且我自己调试的时候,手形的位置不能和 按纽位置重合。做不出与下载下来的源文件中那个swf的效果。


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

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

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了