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这种功能还是很初级的。测试碰撞一般有球体,AABB和多边形几种办法,我们这里仅仅是最简单的以球体来测试碰撞(并不是只能测试碰撞球体)。
(Pv3d默认没有AABB的接触,如果实在需要AABB立方体接触的朋友,可以去讨论区索要,我们会抽时间加入到我们的研究所pv3d傻瓜包)
Pv3d里,我们直接用hitTestObject()这个放法就可以简单的测试物体和物体是否接触。








原理解释:
球体碰撞的原理是非常简单的。由每个物体中心点,到它的最远点为半径虚拟出一个球体。判断两个物体是否相撞,只用判断两个物体中点的距离是否小于两个虚拟球体半径之和即可。
下面这幅图会帮助您理解:
碰撞检测
对,也就是说,球体碰撞是非常不准确但快捷的碰撞,很多场合也足够用了。而且我们这篇毕竟也是‘超简易教程’。

代码解释:
这次我们要制作蓝色小球左右运动,每当接触到绿色小球时,就让绿色小球转动。
这次代码解释非常简单,大部分都是以前的东西。如果不熟悉请先阅读我们之前的教程。
需要的朋友可以下载我们的源代码

这个和pv3d没什么关系,就是让一个东西在某区间来回移动的代码。
sphere1.x+=speed;
if (sphere1.x>500||sphere1.x<-500)
{
speed*=-1;
}


一旦sphere1‘接触’到了sphere2,就让sphere2开始旋转,直到不‘接触’为止。
if (sphere1.hitTestObject(sphere2)) {
sphere2.rotationY+=10;
}


这里在下要提一下,我们从来没有在enterFrame的方法里面测试过sphere,cube,plane等等物体是否存在就开始动了,这是因为这些物体都是pv3d的‘内置’物体,没有必要去确定是否存在先。而外部导入的东西,比如说md2,dae等等模型,jpg,bmp等等位图必需要先确定是否存在,再进行各种运动,否则就要报错。

到此,配合您本来的ActionScript3基础,您至少应该能做出一些小小的pv3d程序了,我们希望能看到您自己的作品。继续加油。
有任何不清楚的地方,欢迎到讨论区发言。(无需注册)



DDM君
Flab3D.com


Flash3d研究所推荐的Pv3d傻瓜包下载
源文件下载


wzsisgood123
(2009-01-06 22:18:53)
嘿学习了
yadang
(2009-02-16 23:43:07)
不错 真不错
jeff
(2009-05-13 14:00:37)
好象碰撞时出现破面了
Jerry
(2009-12-29 12:14:06)
放大之后看在边缘确实是有破面的现象啊,自己试试分层吧
marcoojoey
(2010-01-31 22:31:08)
学习了。

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

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