XEricSin 发表于 2016-4-20 10:09:29

贤知的重新设置站堆位置函数,意义何在?

本帖最后由 XEricSin 于 2016-4-20 10:10 编辑

我看封神28号脚本里九头围攻动画相关命令有以下几句:

!!FU16040:Px16/?y33;//调用重新设置堆栈位置函数By 007 @贤知有您
!!FU16011:Px2/x16/?y35; //调用计算生物之间距离函数 By Besry
。。。。
!!VRz3:S^ThemadD.def^;狂化
!!FU16037:P0/3/y33/75/1/0/1;//调用更换魔法动画函数 By 007

可以看到,FU16037调用动画的时候是用的重新设置站堆位置后的格子坐标。
这样改坐标用意何在呢?
FU16037使用的动画def名称为ThemadD。我在封神的pac中发现了ThemadD和ThemadS,难道D是double,S是single?分别给双格生物和单格生物?
再看FU16040更改位置函数,有个检测生物标记的部分!!BMx1:I?y1 F?i; 而且i是用作检测生物单双格标记,那么我猜测更改位置其实是只对双格生物有效,是在选择双格怪左边的格子。

另外,FU16040中没有出现BM:P#的命令,也就是说其实没有真正重设生物位置,只是返回一个生物左边格子的坐标到y33。


**======================================================**

**VRz3:S^Hawaiing007.def^;
**FU16037:P0/3/93/100/0/0/0;//调用更换魔法动画函数 By 007
!?FU16037;
**x1=借用的BM:V动画编号(0-82)注意不是所有编号都能正确播放动画(需修改播放标志)
**x2=存储"外调的DEF动画名字"的z变量索引(不能使用负数z变量)
**x3=播放的坐标位置(0-187)
**x4=延时(播放速度,一般用100)
**x5=播放标志,施放动画的位置(0-4)(BM:V时会考虑堆栈的体积)--默认用0
**(经测试)=0动画底部为基准,=1以动画中心为基准,=3?,=4英雄位置
**x6=播放标志,是否透明化(0否,1是)
**x7=是否自行修改播放标志(0否,1是)

**FU16040:Px1/?y2;//调用重新设置堆栈位置函数By 007
!?FU16040;
**x1=生物堆栈
**x2=重置位置
**需结合特殊魔法动画使用
!!FU|x1<0/x1>41:E;
!!BMx1:I?y1 F?i;
!!VRi:&1;
!!UN:C6919200/4/?y2;   [调用内存]
!!VRy3:Sx1 *1352 +21708 +y2;
!!SN:E4481984/2/y3;
!!BMx1:P?y4;
!!VRy5:Sv1;
!!VRx2&i=0:Sy4;
!!if&i>0:;
!!BMx1:N?y6;
!!if&y6>0:;
!!VRx2&y1=0:Sy4;
!!VRx2&y1=1:Sy5;
!!en:;
!!if&y6=0:;
!!VRx2&y4<=y5:Sy4;
!!VRx2&y4>y5:Sy5;
!!en:;
!!en:;



贤知有您 发表于 2016-4-20 11:31:01

本帖最后由 贤知有您 于 2016-4-20 11:42 编辑

逐渐淡忘关于内存函数的意义.
内存函数与我渐行渐远.

楼主猜得都已经差不多了,这个函数就是获得真正坐标的.
实际上,BM:P在活动堆栈(生存)下获得坐标是没错的,只有在死亡后,并且是双格生物时可能就出现意外.
之所以出现"意外",是因为双格生物在死亡时的朝向可能是反方向的.这时获得的坐标就有误(变成了另外一个坐标).
而后续函数对于堆栈施放动画时,如果坐标偏差了,放置的动画就会发生偏差.

楼主如果看不懂死亡后堆栈的坐标到底有啥问题,可以做这类测试:
双格生物在对方背后攻击(产生了转身),并且被对手反击死亡(也就是死亡时是转身的状态)(或者直接砍死已经转身应对攻击的对方)
这时检测一下这个死亡堆栈的BM:P.思考一下这个死亡堆栈的朝向问题.

需要注意的是,这个函数就是为后面施放魔法而准备的.

贤知有您 发表于 2016-4-20 11:47:35

补充一下.
这里是咨询沧海一粟的,因为函数应该是他编写的,我已经没啥印象了.

按照理解,施放动画需要找到堆栈的最左端坐标(主要指双格部队时)?
然后看函数
!!BMx1:N?y6;
!!if&y6>0:;
!!VRx2&y1=0:Sy4; ----->左势力堆栈,用左端的坐标
!!VRx2&y1=1:Sy5; ------->右势力堆栈,用左端的坐标(也就是非BM:P的坐标)
!!en:;
!!if&y6=0:;
!!VRx2&y4<=y5:Sy4;
!!VRx2&y4>y5:Sy5;
!!en:;
感觉上,不管y6值如何.
!!VRx2&y4<=y5:Sy4;
!!VRx2&y4>y5:Sy5;
这段找到最左端坐标依然是正确的.

@沧海一粟 还请老人家详解.
;aiel;

页: [1]
查看完整版本: 贤知的重新设置站堆位置函数,意义何在?

捐赠