找回密码
 点一下
查看: 7628|回复: 47

SC2的2D逻辑模拟吸引力和斥力测试

[复制链接]
发表于 2010-4-6 00:25:46 | 显示全部楼层 |阅读模式
在XML里找到一个效果,可以以一个点(或者是一个单位)为中心向目标单位施加力。

可以是斥力也可以是吸引力。


注意这个东西显然并非是由Havok物理引擎达成的,而是游戏本身模拟出来的效果。
今后的地图编辑器能否让我们直接使用Havok物理效果,还是很大的未知数。


于是对其进行了一些测试。


以下是一些特性:

1]这个力是2D逻辑的,简单地说就是无法把空中单位吸到地面或者反之。

2]这个力就像是“瞬时”的,很奇特。但实际上,真正符合经典牛顿物理性质的力,瞬间力是没意义的。如果一个力只能作用一瞬间,那么它必然无法改变物体的速度。而事实是,目标单位受力后确实会移动。如果要不断移动单位,需要不断地重复使用这个效果才行。

3]与war3中直接移动单位的相似之处:实际上这个力很多方面更像是直接向着目标点移动单位(虽然其实并非是如此)。力大就移动得距离大,力小距离就短。但我无法确定地知道这个移动过程究竟真的是瞬时的还是仅仅是“作用时间很短,看上去像是瞬时的”。但,就算这个力真的仅仅是“作用时间很短”,这里依然存在一个矛盾,那就是除非阻力存在,否则一个作用时间很短的力也能使得物体一直以匀速直线运动前进。但事实是,受力单位都是被向着目标点拽了一段以后就停下了,并没有保持那个速度继续前进。因此从很多方面看,这个“力”是模拟的。但是也并不能完全肯定,也许存在一个阻力常数,令不再受力的单位立刻停止也说不定。因为我在试验过程中确实弄出了一个受力一次后一直做直线运动直到撞到地图边界的单位。但我不确定这是不是bug。而且由于目前缺少脚本的支持,也无法测定这个单位是否真的是在以匀速直线运动前进。

4]与war3中直接移动单位的不相似之处:上面讲了相似点,于是现在来讲讲不似点。就算这个力真的不符合经典物理定律,它相比起直接移动单位还是有很多可取之处的。因为它确实不是“直接移动到目标点”而是“有高速但确实是逐渐移动过去的特征”比如这个障碍物效果——

在war3里要制作2D逻辑的击退效果或者吸引效果,显然会遇到几个问题。如何移动单位?一点点移动还是直接移动到目标点?中途障碍物处理怎么办?如果一下子移动太长距离,单位就会跳过障碍物。这个就很麻烦。

因此这就是我要说的不相似点。因为在试验过程中,单位无论从视觉上还是测试结果上,都并非是直接移动位置,而是确实经过了中途那一段距离的。

以下是例子:

测试效果为把全地图的可动单位全部拉向地图中心的英雄所在的位置,力的值为100(总之是非常非常大)

2.jpg

3.jpg

未命名.jpg
   
可以看出,所有的飞行单位瞬间被拉过来了。而农民因为是陆地单位则被卡住了。一部分直接被建筑给卡住,另一部分则被悬崖所卡住。

可见这个效果并非是直接移动单位一段距离。而是会经过中途的部分,而且还会被中途的障碍所卡住。因为这两个条件中有任何一条不符合,这些农民就不会卡在半路上,而是和那些空中单位一样直接被吸到英雄身边。


于是做击退效果很方便了。


5]对于移动速度或者移动加速度为0的单位,这个效果无法使其移动位置。这点又很像war3的SetUnitX和SetUnitY了。不过“移动”这个技能在这里并不是必要的。

6]打断命令。与其说是打断命令,这个效果不如说是会“取消当前命令”。因为在受到力的作用后,使用shift指定的后续命令依然会执行。只是当前正在执行的命令会被取消。

7]质量效应。SC2的单位都有个“质量”属性。而这个效果里可以指定质量百分比,比如质量大的受力大,质量小的受力小。但事实上目前缺乏可用来精确测量的函数,况且这个效果其实并不符合真实的物理定律,因此我暂时还无法推出力、质量和实际移动距离这三者之间的数学关系。我估计它有自己的一套公式。
发表于 2010-4-6 00:35:17 | 显示全部楼层
头目,你怎么数学物理化学英语语文编程逻辑哲学都如此强悍?
我想我只能从我的体重和身高上才能找到对你的一点点优势。
回复

使用道具 举报

发表于 2010-4-6 00:40:17 | 显示全部楼层
沙发没了..........................
回复

使用道具 举报

发表于 2010-4-6 00:42:35 | 显示全部楼层
说不定头目比你高呢
回复

使用道具 举报

发表于 2010-4-6 00:48:21 | 显示全部楼层
首先膜拜一下。。
我觉得一般所说一个力是瞬时的,就是指受力时间无限接近于0.。。我记得高中的时候就说的是瞬间给了物体一个冲量。。然后物体获得了动量- -       也许那个值不是力,是个冲量- -    但是如果说是力貌似也行得通。。
我还觉得如果是匀速直线运动可以观察得出来。。匀加速运动和匀速运动还是差别很大的。。
勉强回忆了下物理。。我觉得我都快还给老师老- -
然后惯例再次表示膜拜  -,-!!!
回复

使用道具 举报

 楼主| 发表于 2010-4-6 00:57:25 | 显示全部楼层
引用第4楼gamedsn于2010-04-06 00:48发表的  :
首先膜拜一下。。
我觉得一般所说一个力是瞬时的,就是指受力时间无限接近于0.。。我记得高中的时候就说的是瞬间给了物体一个冲量。。然后物体获得了动量- -       也许那个值不是力,是个冲量- -    但是如果说是力貌似也行得通。。
我还觉得如果是匀速直线运动可以观察得出来。。匀加速运动和匀速运动还是差别很大的。。
勉强回忆了下物理。。我觉得我都快还给老师老- -
然后惯例再次表示膜拜  -,-!!!
.......

总之,先假设它在2D逻辑上符合物理定律,我们也得先得知这个力究竟作用了多少时间,否则算不出实际效果来。当然,如果它要求的那个属性值本身就是冲量,那倒确实不用知道它作用了多久了。但无论怎么说,这个效果的基础类名字写的是力(Force)。不过它名字叫力其实是冲量的可能性嘛,目前倒也有可能。

另外么,说到那个我搞出来的疑似匀速直线运动的物体。确实不大看得出来,因为它运动得实在太快了。地图又小,一下子就撞到边界去了。

为什么说它可能是bug呢,因为它一是在力作用结束后不停止,正常单位都会停止,2是其移动速度明显比其余单位快很多,几乎是一瞬间撞到地图边界。因此其实是bug的可能性也是有的。
回复

使用道具 举报

发表于 2010-4-6 01:03:57 | 显示全部楼层
所言极是。。。。
我还是老老实实用galaxy好了-,-
顺便我去补补物理..我马上要忘光了。。。
睡觉了。。明天继续关注此贴- -
回复

使用道具 举报

 楼主| 发表于 2010-4-6 01:06:56 | 显示全部楼层
其实现在要测量两点间的距离还是可行的。

只是这些单位本身也坐不住,会动来动去的,因此免不了会有一些误差。

因此只能进行不那么精确的测量。
回复

使用道具 举报

发表于 2010-4-6 01:09:19 | 显示全部楼层
如果被吸引/排斥的过程中一直是匀速的话... 也许并非是物理的吧?
可能它的计算十分简单呢?或许会让头目失望...
比如 移动速度 恒等于 (力?) / 单位质量

也许那个力并非是经典力学的力的概念,更像汽车的“马力”? >_<

----------- 帖子于 01:09 更新 --------- 之前内容发布于 01:08 ------------

不知力和距离有米有关系???
回复

使用道具 举报

 楼主| 发表于 2010-4-6 01:10:27 | 显示全部楼层
引用第8楼Conflux于2010-04-06 01:08发表的  :
如果被吸引/排斥的过程中一直是匀速的话... 也许并非是物理的吧?
可能它的计算十分简单呢?或许会让头目失望...
比如 移动速度 恒等于 (力?) / 单位质量

也许那个力并非是经典力学的力的概念,更像汽车的“马力”? >_<


实际上匀速不匀速看不出来,因为正常情况下它就像是被扯了一下一样,一下子被拖到一个新位置。

只有偶尔才会弄出一个一直运动的单位。


无论如何,我一开始就知道这个不是havok效果,非常可能是非物理的。因此无所谓失望不失望的。目前只想知道它的公式而已。
回复

使用道具 举报

发表于 2010-4-6 01:37:12 | 显示全部楼层
头目是Loli头目是Loli头目是Loli

其实黑洞效果更好了呢...诶?头目啊,跟距离也有关系的吧?想想也不太可能...
回复

使用道具 举报

发表于 2010-4-6 01:45:26 | 显示全部楼层
说到黑洞比较好奇扭曲单位的效果
回复

使用道具 举报

发表于 2010-4-6 02:16:35 | 显示全部楼层
母舰的漩涡也很神奇...
回复

使用道具 举报

发表于 2010-4-6 02:21:20 | 显示全部楼层
啊啊,其实说的就是漩涡,真糟糕竟然凭印象说了
回复

使用道具 举报

发表于 2010-4-6 02:44:29 | 显示全部楼层
是叫漩涡的么....原来是叫漩涡啊......
回复

使用道具 举报

 楼主| 发表于 2010-4-6 03:20:19 | 显示全部楼层
好吧,利用脚本测试的结果出来了。

移动的距离(如果中途没有障碍物)=“力”的绝对值*(1-质量*质量因子)

如果“力”的值是正数就是排斥,负数就是吸引。



因此这个值不如直接说成是推动距离了。这样免得歧义。

如果中途有障碍物,那么该单位会停在这个障碍物上。

如果(1-质量*质量因子)得到一个负值那么就不予移动。


暂时是这样。接下去测试下那个不断移动的意思bug的单位。



----------- 帖子于 03:20 更新 --------- 之前内容发布于 02:47 ------------

发现那个单位确实是匀速运动来着。但是具体多少秒移动一段距离就很难测了,因为sc2的wait似乎还是有最小精度问题。

粗略估计是大约0.05秒移动上述公式的距离长度。至于它为何会不断移动就不得而知了。而且另外看来这个速度无法矢量叠加。我在它移动的时候施加一个反向,绝对值的力效果,这个单位就被拖回去了。原有的速度完全被忽略,看来无法进行什么复杂的物理运动。

目前看来只适合做击退效果之类的。
回复

使用道具 举报

发表于 2010-4-6 06:57:53 | 显示全部楼层
很好玩的样子~
回复

使用道具 举报

发表于 2010-4-6 07:59:56 | 显示全部楼层
现成的,热乎的。
不用模拟了。
回复

使用道具 举报

发表于 2010-4-6 08:41:28 | 显示全部楼层
厉害阿
回复

使用道具 举报

发表于 2010-4-6 09:08:06 | 显示全部楼层
不过竟然失望了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 09:13 , Processed in 0.089659 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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