找回密码
 点一下
查看: 16775|回复: 29

轨迹的制作教程

[复制链接]
发表于 2011-7-25 19:21:35 | 显示全部楼层 |阅读模式
副标题:水水的教程,水水的猫咪(关键是要有爱)

闲着无聊,于是也来发一个教程吧……新手向的,关于常用运动轨迹的算式……
这里只讨论算式,不讨论多人化、排泄以及应用……

1.直线运动:单位沿ang度的方向移动速度为(b/触发器周期)
(最基础的运动方式)

算法1
事件
时间 - 每当游戏逝去0.03秒
条件
动作
设置 point1 = (从((马甲)的位置)开始,距离为b,方向为ang度的位移处)
单位 - 设置(马甲)的X坐标为(point的X坐标)
单位 - 设置(马甲)的Y坐标为(point的Y坐标)
点 - 清除point1

算法2
事件
时间 - 每当游戏逝去0.03秒
条件
动作
单位 - 设置(马甲)的X坐标为(((马甲)所在的X轴坐标) + b × cos(ang))
单位 - 设置(马甲)的Y坐标为(((马甲)所在的Y轴坐标) + b × sin(ang))

2.锯齿:和直线运动相似,单位沿直线运动时附加在直线两侧来回震动
(这个应用范围很小,适合的模型不多……)

开始时要记录运动开始点point_start,角度为ang,直线速度为(b/触发器周期),振幅为k

事件
时间 - 每当游戏逝去0.03秒
条件
动作
设置 - U_x = (U_x + b)
设置 - U_y = k
设置 - k = (0 - k)
-------------分割线,以上的部分为沿着0°方向的运动轨迹,以下的部分则是给轨迹加上角度---------------
设置 - point1 = (坐标(U_x,U_y))
设置 - point2 = (从point_start开始,距离(point_start和point1之间的距离),方向为((point_start到point1的角度) + ang)度的位移处)
单位 - 设置(马甲)的X坐标为(point2的X坐标)
单位 - 设置(马甲)的Y坐标为(point2的Y坐标)
点 - 清除point1
点 - 清除point2

3.波浪线:正弦函数,不解释……

角度为ang,直线速度为(b/触发器周期),振幅为k,波长与a成反比

第一种:趴在地上的波浪线
事件
时间 - 每当游戏逝去0.03秒
条件
动作
设置 - U_x = (U_x + b)
设置 - U_y = (k × sin((a × U_x)))
-------------分割线,以上的部分为沿着0°方向的运动轨迹,以下的部分则是给轨迹加上角度---------------
设置 - point1 = (坐标(U_x,U_y))
设置 - point2 = (从point_start开始,距离(point_start和point1之间的距离),方向为((point_start到point1的角度)+ang)度的位移处)
单位 - 设置(马甲)的X坐标为(point2的X坐标)
单位 - 设置(马甲)的Y坐标为(point2的Y坐标)
点 - 清除point1
点 - 清除point2

第二种:站起来的波浪线
开始时要记录运动开始点point_start,h为马甲基础高度(h必须大于k,不然波浪线会有一段在地表下进行)
事件
时间 - 每当游戏逝去0.03秒
条件
动作
设置 - U_x = (U_x + (b × cos(ang)))
设置 - U_y = (U_y + (b × sin(ang)))
-------------分割线,以上的部分为沿着0°方向的运动轨迹,以下的部分则是给轨迹加上角度---------------
设置 - point1 = (坐标(U_x,U_y))
动画 - 改变(马甲)的飞行高度为(h + (k × sin((a × (point_start和point1之间的距离))))),变换速率为9999
单位 - 设置(马甲)的X坐标为(point1的X坐标)
单位 - 设置(马甲)的Y坐标为(point1的Y坐标)
点 - 清除point1

4.抛物线:看名字就知道的,也没什么好解释……

算法1
开始时要记录运动开始点point_start,系数k调整曲线的形状(必须为负),h就是抛物线最高点,2×l就是整个抛物线水平长度

事件
时间 - 每当游戏逝去0.03秒
条件
动作
设置 - U_x = (U_x + (b × cos(ang)))
设置 - U_y = (U_y + (b × sin(ang)))
设置 - point1 = (坐标(U_x,U_y))
设置 - s = point_start到point1之间的距离
动画 - 改变(马甲)的飞行高度为(k × ((s - l)的2次幂))+h),变换速率为9999
单位 - 设置(马甲)的X坐标为(point1的X坐标)
单位 - 设置(马甲)的Y坐标为(point1的Y坐标)
点 - 清除point1

算法2
开始时要记录运动开始点point_start,系数k调整曲线的高度,l是整个抛物线的抛射水平长度,最大高度为k×(l^2)/4

事件
时间 - 每当游戏逝去0.03秒
条件
动作
设置 - U_x = (U_x + (b × cos(ang)))
设置 - U_y = (U_y + (b × sin(ang)))
设置 - point1 = (坐标(U_x,U_y))
设置 - s = point_start到point1之间的距离
动画 - 改变(马甲)的飞行高度为(k × (s × (s - l)),变换速率为9999
单位 - 设置(马甲)的X坐标为(point1的X坐标)
单位 - 设置(马甲)的Y坐标为(point1的Y坐标)
点 - 清除point1

轨迹.w3x (26 KB, 下载次数: 500)
“l1”and“l2”锯齿
“l3”and“l4”波浪线
“l5”抛物线
“R1”椭圆
“R2”and“R3”圆的第二种方法
“R3”+空格+3位数:设置圆的初始旋转半径
“R4”竖直的圆
每测试一次过后按下Esc重置单位的坐标……

评分

参与人数 1威望 +100 收起 理由
希瓦 + 100 不错的演示

查看全部评分

 楼主| 发表于 2011-7-25 19:23:02 | 显示全部楼层

水2!

1.圆:
第一种:
到顶点的距离等于定长的点的集合(我记得数学书上是这样教的……)

(S_x,S_y)是圆心坐标,R是圆半径

事件
时间 - 每当游戏逝去 0.03 秒
条件
动作
设置 ang = (ang + 5.00)
设置 U_x = (S_x + (R × (Cos(ang))))
设置 U_y = (S_y + (R × (Sin(ang))))
单位 - 设置 U 的X坐标为U_x
单位 - 设置 U 的Y坐标为U_y

圆的第二种方法:物理上提到圆周运动的特点是,物体在每点的运动速度的方向总是和过该点的半径垂直,所以,圆周运动也可以是每个运动周期,单位向垂直于半径的方向做一个距离为无穷小的位移……(这样是一个扩大的螺旋函数)
魔兽里并不存在无穷小,于是这样的移动方式,即使距离是0.01,物体也会离圆心越来越远……
但是如果并不是垂直半径运动,而是成一个略小于90的角度,使得每次位移前后与圆心的距离不变,就能完成圆周运动……
这样形成的圆周运动,半径和角度的函数关系的计算比较麻烦,也许你认为不如第一种方法实用,但是这样的圆周运动有个有趣的特性:你可以不用计算半径,随便定个数值,实际运作起来的时候,你会发现,单位的当前旋转半径会逐渐接近理论的旋转半径,一点点靠近……
因此在需要平滑改变旋转半径的时候,这种方法更简便……

s是每个周期的位移,ang是关系的半径大小的角度,P0是圆心

事件
时间 - 每当游戏逝去 0.01 秒
条件
动作
设置 P1 = (U 的位置)
设置 angle2 = ((P1 到 P0 的角度) + ang)
-------- 上面这个ang就是决定了最终旋转半径,至于有什么样的函数关系就不知道了 --------
设置 U_x = (U_x + (s × (Cos(angle2))))
设置 U_y = (U_y + (s × (Sin(angle2))))
单位 - 设置 U 的X坐标为 U_x
单位 - 设置 U 的Y坐标为 U_y
点 - 清除P1

2.椭圆:
其实把圆压扁了就是椭圆……于是用圆的公式,但x,y轴系数不同步就能创造一个椭圆

2×a,2×b分别是椭圆的长和宽,Angle是椭圆的朝向角度,P0为椭圆中心

事件
时间 - 每当游戏逝去 0.03 秒
条件
动作
设置 ang = (ang + 5.00)
设置 U_x = ((P0 的x轴坐标) + (a × (Cos(ang))))
设置 U_y = ((P0 的y轴坐标) + (b × (Sin(ang))))
-------- 角度的调整(没有下边这个,轨迹只能是水平或者竖直的) --------
点 - 移动 P1 到(U_x,U_y)
设置 P2 = (从 P1 开始,距离 (P1 和 P0 之间的距离) ,方向为 ((P1 到 P0 的角度) + Angle) 度的位移处)
单位 - 设置 U 的X坐标为 (P2 的X轴坐标)
单位 - 设置 U 的Y坐标为 (P2 的Y轴坐标)
点 - 清除P1
点 - 清除P2

3.站立的圆:仔细看这个函数和圆的很像,不过是把一条坐标轴的改成了改变飞行高度……还要加上旋转的部分……

R是旋转半径,H是圆心高度(最好大于R,不然就进土里了),P0是圆心,angle2是圆的旋转角

事件
时间 - 每当游戏逝去 0.03 秒
条件
动作
设置 angle = (angle + 5.00)
设置 U_x = (S_x + (R × (Cos(angle))))
动画 - 改变 U 的飞行高度为 (H + (R × (Sin(angle)))) ,变换速率: 99999.00
设置 U_y = S_y
-------- 角度的调整(没有下边这个,轨迹只能是水平或者竖直的) --------
点 - 移动 P1 到(U_x,U_y)
设置 P2 = (从 P0 开始,距离 (P0 和 P1 之间的距离) ,方向为 ((P0 到 P1 的角度) + angle2) 度的位移处)
单位 - 设置 U 的X坐标为 (P2 的X轴坐标)
单位 - 设置 U 的Y坐标为 (P2 的Y轴坐标)
点 - 清除P1
点 - 清除P2
回复

使用道具 举报

 楼主| 发表于 2011-7-25 19:23:27 | 显示全部楼层
虽然只给出了最基础的一些轨迹,但并不代表不能做出华丽的东西
先放一些作品好了……
1.JPG
2.JPG
用了椭圆+抛物线
花轨迹.w3x (34 KB, 下载次数: 212)

好吧,只有这个有人看,于是只留这个好了……
回复

使用道具 举报

 楼主| 发表于 2011-8-7 20:15:54 | 显示全部楼层
之前发过一个万能环绕函数,不过没有被重视,于是现在挖掘潜力重新发出来……
堆完马甲的效果还不错……
其实这个函数是用原来的任意角度环绕函数改的,其实有些纯粹是胡乱改了算式,所以每个参数的意思猫咪也并不完全清楚……
轨迹circle222.w3x (20 KB, 下载次数: 159)
下图所有的效果都是这一个函数弄出来的,里面的大部分参数和算式你都可以自由修改,猫咪也不知道这东西的潜力到底有多大……
circle100x10.JPG
circle3x50.JPG
cicle100x100.JPG
circlr3x100.JPG
circle_g5.JPG
circle_g3.JPG
circle_g2.JPG
circle_g1.JPG
circle_w2.JPG
circle_w1.JPG
回复

使用道具 举报

 楼主| 发表于 2011-8-10 12:10:49 | 显示全部楼层
雪球.gif
雪球2.png
再弄两张动态的图图……



下面这个环绕就是这个创意最原始的算式,通过对竖直的环绕添加一个三角函数达成任意角度的环绕……(可惜之前一直被无视的说……)

轨迹circle.w3x (20 KB, 下载次数: 206)

原理在这http://bbs.islga.org/read.php?tid=175104&displayMode=1#618070
回复

使用道具 举报

发表于 2011-8-12 16:59:43 | 显示全部楼层
内牛满面
回复

使用道具 举报

发表于 2011-8-12 17:02:29 | 显示全部楼层
好强大```不过我是个数学盲````
回复

使用道具 举报

发表于 2011-8-13 11:31:56 | 显示全部楼层
我是来吐槽的
如何将自己的触发放进帖子里
有加强UI,吃棍

当然这教程本身很棒,有乜有后续呢
回复

使用道具 举报

 楼主| 发表于 2011-8-13 17:37:14 | 显示全部楼层
后续会有的,基本就是一些简单作品了……估计再要弄出像这样强大的函数也难了……
其他的没什么好的了,发完这个突然会有种失落感……
关于帖触发……刚开始写这个是用TXT的,所以懒得再加 trigger 了……
回复

使用道具 举报

发表于 2011-8-17 16:42:17 | 显示全部楼层
大宇宙银河先生。
回复

使用道具 举报

发表于 2011-8-29 07:38:27 | 显示全部楼层
为了防止帖子消失后每演示,先下载好附件收藏起来,慢慢领悟。
回复

使用道具 举报

 楼主| 发表于 2011-8-31 10:04:01 | 显示全部楼层
之前发了任意角度的环绕,不过仍有人没看懂,于是详细说一下原理……

从最简单的平面环绕开始……

设置 U_x = (S_x + (R × (Cos(angle))))
设置 U_y = (S_y + (R × (Sin(angle))))

(U_x,U_y)就是环绕马甲的坐标
(S_x,S_y)就是中心点的坐标
angle就是马甲到中心点的角度,时间周期调整此参数让马甲做环绕动作
R是环绕半径,就是马甲到中心点的距离

然后变成立体的……

设置 U_x = (S_x + (R × (Cos(angle))))
设置 U_z = (S_z + (R × (Sin(angle))))

S_z是中心点的高度,其他的都相同
以上的算式基本把环绕的U_y改成了U_z,这里U_z是马甲的飞行高度,于是马甲在竖着环绕,但此时环绕平面的面向为 -90°

再倾斜……

设置 U_x = (S_x + (R × (Cos(angle))))
设置 U_y = (S_y + (R × (Sin(angle)) × (Cos(angle倾斜))))
设置 U_z = (S_z + (R × (Sin(angle)) × (Sin(angle倾斜))))

此时多了一个angle倾斜,这个就能使环绕面倾斜(即环绕平面与水平面不垂直),但环绕平面的朝向仍为 -90°

最后改朝向……

下面这个是更改朝向的……

点 - 移动 P1 到(U_x,U_y)
设置 P2 = (从 P0 开始,距离 (P0 和 P1 之间的距离) ,方向为 ((P0 到 P1 的角度) + angle朝向) 度的位移处)
单位 - 设置 U 的X坐标为 (P2 的X轴坐标)
单位 - 设置 U 的Y坐标为 (P2 的Y轴坐标)
点 - 清除 P2

P0就是中心点
回复

使用道具 举报

发表于 2011-11-5 16:18:11 | 显示全部楼层
帅啊
回复

使用道具 举报

 楼主| 发表于 2011-11-24 21:40:06 | 显示全部楼层

送给西瓜娘~

星2.png
于是坑掉一些东西……
回复

使用道具 举报

发表于 2011-12-4 06:32:58 | 显示全部楼层
   这个星星看起来挺简洁的。。。

   上次给我的太渣了啦。
回复

使用道具 举报

 楼主| 发表于 2011-12-4 22:16:47 | 显示全部楼层

回 18楼(uoer) 的帖子

uoer:   这个星星看起来挺简洁的。。。

   上次给我的太渣了啦。 (2011-12-04 06:32)
其实就是一个东西,只是漠漠不识货……
回复

使用道具 举报

发表于 2011-12-7 11:18:14 | 显示全部楼层
好多投射物!
回复

使用道具 举报

 楼主| 发表于 2011-12-7 21:02:26 | 显示全部楼层
投射物那幅不是早就坑掉了么……jpg是说哪幅?
回复

使用道具 举报

发表于 2011-12-30 14:23:40 | 显示全部楼层
好漂亮 收下 研究研究
回复

使用道具 举报

发表于 2011-12-31 12:15:01 | 显示全部楼层
收藏起来慢慢学
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-21 23:46 , Processed in 0.215359 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表