|
主题: 从不同角度靠近一个目标的效果怎么做?
|
 暗黑菜鸟
职务:普通成员
等级:1
金币:10.0
发贴:225
注册:2001/11/1 21:51:24
|
#12001/11/6 15:34:06
我想做多个mc靠近一个目标的效果,该怎么做??? 还有就是用到的数学公式是什么???
|
 janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
注册:2003/11/27 18:07:11
|
#22001/11/6 15:47:21
在我写的一个名为“有限距离内拖动节点”的教程中有这样的应用,希望能对你有所帮助。 SWF: 页面: 点这儿参观FLA: janlay.top263.net/myfile/dragnode/dragnode.fla
编辑历史:[这消息被janlay编辑过(编辑时间2001-11-06 15:49:01)]
|
 暗黑菜鸟
职务:普通成员
等级:1
金币:10.0
发贴:225
注册:2001/11/1 21:51:24
|
#32001/11/6 16:21:10
你这个例子是连动效果,我说的是多个mc的随机运动~~~ 关键是不知道如何使mc从各个不同的角度靠近一个目标啊~
|
 janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
注册:2003/11/27 18:07:11
|
#42001/11/6 16:38:05
原理是一样的,只是要修改的mc数量不一样罢了。
另外,要想实现随机靠近,可以把每次靠近的步长值设为随机数。
|
 暗黑菜鸟
职务:普通成员
等级:1
金币:10.0
发贴:225
注册:2001/11/1 21:51:24
|
#52001/11/6 19:37:43
janlay在上个帖子中说 引用: 原理是一样的,只是要修改的mc数量不一样罢了。
另外,要想实现随机靠近,可以把每次靠近的步长值设为随机数。
你说的这个和我要的刚好是相反的,我是想要mc靠近固定的目标,而且不用鼠标控制的那种~
|
 janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
注册:2003/11/27 18:07:11
|
#62001/11/6 20:53:17
可能是我表述不对,我当然不是说要用鼠标控制了,我想说的是,万变不离其宗,原理上是一样的。 不就是群狼逼近的效果吗
|
 暗黑菜鸟
职务:普通成员
等级:1
金币:10.0
发贴:225
注册:2001/11/1 21:51:24
|
#72001/11/7 14:45:26
janlay在上个帖子中说 引用: 可能是我表述不对,我当然不是说要用鼠标控制了,我想说的是,万变不离其宗,原理上是一样的。
不就是群狼逼近的效果吗
我想要的逼近效果中狼是从四面八方都有的,而且狼头都要向着人的方向,怎么做呢??
|
 janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
注册:2003/11/27 18:07:11
|
#82001/11/7 15:08:10
这里跟你说说狼站立的方向问题:
假设有n只狼:wolf0,wolf1,wolf2...wolf(n-1): var ang=2*Math.PI/n; //每只狼所分配的弧度 var cx=cy=100; //圆心(人)的位置 var r=50; //半径 for(var i=0;i eval("wolf"+i)._x = cx+r*Math.cos(ang*i); eval("wolf"+i)._y = cy+r*Math.sin(ang*i); eval("wolf"+i)._rotation = ang*i; }
编辑历史:[这消息被janlay编辑过(编辑时间2001-11-08 16:59:30)]
|
 暗黑菜鸟
职务:普通成员
等级:1
金币:10.0
发贴:225
注册:2001/11/1 21:51:24
|
#92001/11/7 15:41:47
janlay在上个帖子中说 引用: 这里跟你说说狼站立的方向问题:
假设有n只狼:wolf0,wolf1,wolf2...wolf(n-1): var ang=2*Math.PI/n; //每只狼所分配的弧度 var cx=cy=100; //圆心(人)的位置 for(var i=0;i eval("wolf"+i)._x = cx+r*Math.cos(ang*i); eval("wolf"+i)._y = cy+r*Math.sin(ang*i); eval("wolf"+i)._rotation = ang*i; }
拜~~~ 拜托,能不能再详细些??? 俺的数学实在是太差~~~~~
|
 janlay
职务:管理员
等级:7
金币:28.0
发贴:7244
注册:2003/11/27 18:07:11
|
#102001/11/8 18:09:31
现在画图不方便。 你自己画这样一个图: 圆O的圆心在坐标原点上,过圆上一点P连接圆心,形成半径,长度为r,并作x轴的垂线(也就是和圆相切)。 这时,半径/切线/x轴会形成一个Rt三角形。 现在,已知半径r和圆心位置(当它为0时能简化计算),设半径和x轴夹角为ang(弧度),求点P的位置实际就是求两直角边,很容易了: px=r*cos(ang) py=r*sin(ang)
转化成狼的问题,解释如下: for(var i=0;i eval("wolf"+i)._x = cx+r*Math.cos(ang*i); //设置第i只狼(从0开始数)在x轴上的位置 eval("wolf"+i)._y = cy+r*Math.sin(ang*i); //设置在y轴上的位置 eval("wolf"+i)._rotation = ang*i; //狼的方向
|
 vital
职务:普通成员
等级:1
金币:10.0
发贴:194
注册:2001/5/15 12:10:20
|
#112001/11/9 11:26:07
onClipEvent (enterFrame) { newAngle = Math.atan2(_root.men._y-_y, _root.men._x-_x)*180/(Math.PI); _rotation = newAngle; } 狼头就都会朝人的方向
|
 vital
职务:普通成员
等级:1
金币:10.0
发贴:194
注册:2001/5/15 12:10:20
|
#122001/11/9 11:41:42
onClipEvent (enterFrame) { newAngle = Math.atan2(_root.man._y-_y, _root.man._x-_x)*180/(Math.PI); newx = (_root.man._x-_x)/100+_x; newy = (_root.man._y-_y)/100+_y; _rotation = newAngle; _x = newx; _y = newy; } 移动 topstamp.com.cn/temp/wolf.swftopstamp.com.cn/temp/wolf.fla
|
 暗黑菜鸟
职务:普通成员
等级:1
金币:10.0
发贴:225
注册:2001/11/1 21:51:24
|
#132001/11/9 22:47:17
vital在上个帖子中说 引用: onClipEvent (enterFrame) { newAngle = Math.atan2(_root.man._y-_y, _root.man._x-_x)*180/(Math.PI); newx = (_root.man._x-_x)/100+_x; newy = (_root.man._y-_y)/100+_y; _rotation = newAngle; _x = newx; _y = newy; }
topstamp.com.cn/temp/wolf.swf
topstamp.com.cn/temp/wolf.fla
多谢了~~~ 不过这一句newx = (_root.man._x-_x)/100+_x;里的_x为什么到了句尾才定义呢?
|
 vital
职务:普通成员
等级:1
金币:10.0
发贴:194
注册:2001/5/15 12:10:20
|
#142001/11/9 23:23:54
呵呵,我写的不好,也许应该写成这种形式
_x+=(_root.man._x-_x)/100
|
 暗黑菜鸟
职务:普通成员
等级:1
金币:10.0
发贴:225
注册:2001/11/1 21:51:24
|
#152001/11/10 0:21:35
vital在上个帖子中说 引用: 呵呵,我写的不好,也许应该写成这种形式
_x+=(_root.man._x-_x)/100
是一回事是吧? 谢谢了~ 我要回去研究一下~
|