请选择 进入手机版 | 继续访问电脑版

 找回密码
 点一下
查看: 2673|回复: 9

SC2编辑器细节内容总结

[复制链接]
发表于 2016-8-31 10:34:14 | 显示全部楼层 |阅读模式
本帖最后由 疯人¢衰人 于 2016-9-1 08:10 编辑

这是使用SE时遇到的一些细节问题的总结,由于是多个版本积累,所以可能有部分内容有所差别,或错误。括号中对应的地图文件在附件中
SC2编辑器细节内容总结
1.  集合效果中的最大计数最小数量决定了集合效果中能够起效的效果的总数。如果不启用随机,则将会按照顺序执行。无论是否启用随机,如果执行的效果没有通过验证器验证,将不会继续考虑其他效果,直接结束效果。(随机效果验证器作用测试.SC2Map)
2.  多层行为的每个行为的周期事件都会独立运行。如果到达行为叠加上限,会逐个移除最早添加的行为以保持行为层数不会超过叠加上限(不同单位添加的相同行为的效果差异.SC2Map)
3.  应用和移除行为效果,单个效果会添加移除多层行为时,会多次响应行为增加减少事件,响应次数与操作的行为数量有关。并且每次触发获取的单位获得的行为层数都是最终结果。
4.  当行为的所需条件不满足时,行为层数验证器也不能验证到行为存在。
5.  从模板中创建对话框,会创建模板下所有的UI控件。
6.  [Left]的锚点对[XXX]无效。将重载的锚点UI的pos=""的值Max和Min相应修改。无法使用从模板中创建对话框项创建小地图等官方UI,使用衔接标准对话框项动作Hook标准UI的路径不包括GameUI(小地图相关测试.SC2Map)
7.  TextError:Text [XX] is too tall for a single line. Exceeds by [n] 是指对话框大小(高度)不足以满足单行文字。
8.  在高速移动的单位无法响应全部经过的路径上的区域事件。单位进入离开区域事件是通过在每个周期验证单位是否在区域范围内来实现。(区域事件测试.SC2Map)
9.  FixedToInt向下取整,FloorI向下取整,CeilingI向上取整。(Celiling与Floor作用.SC2Map)
10.  自定义动作或函数时将选项设为子函数,参数就可以采用“任意类型”作为参数类型。此时不填写子函数类型的部分数据,然后在自定义脚本中填写以函数引用、结构体引用及数组引用的为参数的函数的正常调用(动作需要带有分号,函数不需要)语法,通过#PARAM(脚本识别符)来使用自定义动作或函数中的参数,这样可以实现以这些引用作为参数的动作及函数的封装。注意使用这类自定义动作时,引用参数需要选择“任意类型”的变量类型。(结构体引用作为参数类型.SC2Map)
11.  自定义函数及动作时可以采用#AUTOVAR(PoseitionAdditional,fixed [2])[0]这类的方式来声明及使用数组随机变量。
12.  对话框可以被鼠标点击透过。
13.  鼠标UI层分辨率固定为1600*1200,与对话框的UI层坐标不一致。
14.  隐藏面板将会隐藏从面板创建的对话框控件.
15.  对话框项只有可见部分才会触发对话框项系列事件。
16.  引用不能用等于null来验证没有赋值,但是可以用一个未进行赋值的引用来验证。
17.  目前支持的变量类型列表:注释类型为不能赋值为null:
abilcmd gv_variable_0 = null;
aifilter gv_variable_1 = null;
actor gv_variable_2 = null;
actorscope gv_variable_3 = null;
bank gv_variable_4 = null;
//bool gv_variable_5 = null;
//byte gv_variable_6 = null;
camerainfo gv_variable_7 = null;
//char gv_variable_8 = null;
//color gv_variable_9 = null;
doodad gv_variable_10 = null;
effecthistory gv_variable_11 = null;
//fixed gv_variable_12 = null;
generichandle gv_variable_13 = null;
//int gv_variable_14 = null;
marker gv_variable_15 = null;
order gv_variable_16 = null;
playergroup gv_variable_17 = null;
point gv_variable_18 = null;
region gv_variable_19 = null;
revealer gv_variable_20 = null;
sound gv_variable_21 = null;
soundlink gv_variable_22 = null;
string gv_variable_23 = null;
//struct gv_variable_24 = null;
text gv_variable_25 = null;
timer gv_variable_26 = null;
transmissionsource gv_variable_27 = null;
trigger gv_variable_28 = null;
unit gv_variable_29 = null;
unitfilter gv_variable_30 = null;
unitgroup gv_variable_31 = null;
//void gv_variable_32 = null;
wave gv_variable_33 = null;
waveinfo gv_variable_34 = null;
wavetarget gv_variable_35 = null;
18.  引用中,子函数声明的局部变量的数据无法通过引用反馈到父级函数,传递过程中实际数值会丢失。结构体引用的数组在声明后每个结构体引用都是未初始化的,而数组引用的数组是可用的。
19.  本地变量最大值为32k-1,带有一个字段的结构体约占用4,引用为1
20.  创建周期性效果可以通过字段(基本) 搜索: 暴露标旗来开启效果创建的开图器,(基本) 搜索的几个字段值决定了开图效果,这种开图方式无视视野阻断器的影响。(周期性效果开图器.SC2Map)
21.  点在区域内函数,当点在区域边界时返回真。
22.  鼠标指针贴图保存格式为(8.8.8.8 ARGB 32bpp | unsigned)
23.  鼠标滚轮事件在鼠标指针放在某些UI框体(如默认下部UI)上时不会响应鼠标滚轮事件
24.  鼠标进入和离开对话框事件响应于最表层的对话框项
25.  触发上限4096,Mod本身会自带一部分触发
26.  演算体条件Option可以验证游戏配置,等级中“极高(Extreme)”对应游戏配置“极高”,“过激(Ultra)”对应游戏配置“超高”,“着色器”对应“渲染”
27.  “无法作为高亮”,“无法作为目标”,“无法选择”,“无鼠标提示”标旗都为已启用才能去除单位对鼠标选择的遮挡
28.  影响行为进度条的显示的设置条件包括:单位的单位:标旗“无法作为目标的”,单位演算体的UI:状态条标旗:“时长”,行为的UI:显示倒计时“需要显示的联盟关系”
29. 自定义死亡的名称需要在SYSTEM_ActorConfig演算体中定义,然后在单位演算体中的死亡自定义数据,自定义死亡两条属性中新增,最后在演算体的事件增加如下触发内容(注意添加条件):
<On Terms="UnitDeathCustomize" Send="DeathCustomize 自定义死亡名称"/>
30.  默认自定义死亡关键字
<DeathCustomPriorityList value="Empty"/>
<DeathCustomPriorityList value="Upgrade"/>
<DeathCustomPriorityList value="UpgradedFire"/>
<DeathCustomPriorityList value="UpgradedAcid"/>
<DeathCustomPriorityList value="UpgradedEviscerate"/>
<DeathCustomPriorityList value="Warpgate"/>
<DeathCustomPriorityList value="DarkProtoss"/>
<DeathCustomPriorityList value="BlackOps"/>
<DeathCustomPriorityList value="Detached"/>
<DeathCustomPriorityList value="Flying"/>
<DeathCustomPriorityList value="Uprooted"/>
<DeathCustomPriorityList value="Burrowed"/>
<DeathCustomPriorityList value="AntiGravGeneric"/>
<DeathCustomPriorityList value="AntiGravProtoss"/>
<DeathCustomPriorityList value="AntiGravTerran"/>
<DeathCustomPriorityList value="AntiGravZerg"/>
<DeathCustomPriorityList value="Variation0"/>
<DeathCustomPriorityList value="Variation1"/>
<DeathCustomPriorityList value="Variation2"/>
<DeathCustomPriorityList value="Variation3"/>
<DeathCustomPriorityList value="Variation4"/>
<DeathCustomPriorityList value="Variation5"/>
<DeathCustomPriorityList value="Variation6"/>
<DeathCustomPriorityList value="Variation7"/>
<DeathCustomPriorityList value="Variation8"/>
<DeathCustomPriorityList value="Variation9"/>
<DeathCustomPriorityList value="Variation10"/>
<DeathCustomPriorityList value="Variation11"/>
<DeathCustomPriorityList value="Variation12"/>
<DeathCustomPriorityList value="Variation13"/>
<DeathCustomPriorityList value="Variation14"/>
<DeathCustomPriorityList value="Variation15"/>
<DeathCustomPriorityList value="Variation16"/>
<DeathCustomPriorityList value="Variation17"/>
<DeathCustomPriorityList value="Variation18"/>
<DeathCustomPriorityList value="Variation19"/>
<DeathCustomPriorityList value="Variation20"/>
<DeathCustomPriorityList value="Variation21"/>
<DeathCustomPriorityList value="Variation22"/>
<DeathCustomPriorityList value="Variation23"/>
<DeathCustomPriorityList value="Variation24"/>
<DeathCustomPriorityList value="Variation25"/>
<DeathCustomPriorityList value="Variation26"/>
<DeathCustomPriorityList value="Variation27"/>
<DeathCustomPriorityList value="Variation28"/>
<DeathCustomPriorityList value="Variation29"/>
<DeathCustomPriorityList value="Variation30"/>
<DeathCustomPriorityList value="Variation31"/>
<DeathCustomPriorityList value="Variation32"/>
<DeathCustomPriorityList value="Variation33"/>
<DeathCustomPriorityList value="Variation34"/>
<DeathCustomPriorityList value="Variation35"/>
<DeathCustomPriorityList value="Variation36"/>
<DeathCustomPriorityList value="Variation37"/>
<DeathCustomPriorityList value="Variation38"/>
<DeathCustomPriorityList value="Variation39"/>
<DeathCustomPriorityList value="Variation40"/>
<DeathCustomPriorityList value="Variation41"/>
<DeathCustomPriorityList value="Variation42"/>
<DeathCustomPriorityList value="Variation43"/>
<DeathCustomPriorityList value="Variation44"/>
<DeathCustomPriorityList value="Variation45"/>
<DeathCustomPriorityList value="Variation46"/>
<DeathCustomPriorityList value="Variation47"/>
<DeathCustomPriorityList value="Variation48"/>
<DeathCustomPriorityList value="Variation49"/>
<DeathCustomPriorityList value="Variation50"/>
<DeathCustomPriorityList value="Variation51"/>
<DeathCustomPriorityList value="Variation52"/>
<DeathCustomPriorityList value="Variation53"/>
<DeathCustomPriorityList value="Variation54"/>
<DeathCustomPriorityList value="Variation55"/>
<DeathCustomPriorityList value="Variation56"/>
<DeathCustomPriorityList value="Variation57"/>
<DeathCustomPriorityList value="Variation58"/>
<DeathCustomPriorityList value="Variation59"/>
<DeathCustomPriorityList value="Variation60"/>
<DeathCustomPriorityList value="Variation61"/>
<DeathCustomPriorityList value="Variation62"/>
<DeathCustomPriorityList value="Variation63"/>
<DeathCustomPriorityList value="Variation64"/>
<DeathCustomPriorityList value="Variation65"/>
<DeathCustomPriorityList value="Variation66"/>
<DeathCustomPriorityList value="Variation67"/>
<DeathCustomPriorityList value="Variation68"/>
<DeathCustomPriorityList value="Variation69"/>
<DeathCustomPriorityList value="Variation70"/>
<DeathCustomPriorityList value="Variation71"/>
<DeathCustomPriorityList value="Variation72"/>
<DeathCustomPriorityList value="Variation73"/>
<DeathCustomPriorityList value="Variation74"/>
<DeathCustomPriorityList value="Variation75"/>
<DeathCustomPriorityList value="Variation76"/>
<DeathCustomPriorityList value="Variation77"/>
<DeathCustomPriorityList value="Variation78"/>
<DeathCustomPriorityList value="Variation79"/>
<DeathCustomPriorityList value="Variation80"/>
<DeathCustomPriorityList value="Variation81"/>
<DeathCustomPriorityList value="Variation82"/>
<DeathCustomPriorityList value="Variation83"/>
<DeathCustomPriorityList value="Variation84"/>
<DeathCustomPriorityList value="Variation85"/>
<DeathCustomPriorityList value="Variation86"/>
<DeathCustomPriorityList value="Variation87"/>
<DeathCustomPriorityList value="Variation88"/>
<DeathCustomPriorityList value="Variation89"/>
<DeathCustomPriorityList value="Variation90"/>
<DeathCustomPriorityList value="RagdollNoBlood"/>
<DeathCustomPriorityList value="RagdollBlood"/>
<DeathCustomPriorityList value="RagdollBasicNoBlood"/>
<DeathCustomPriorityList value="RagdollGibNoBlood"/>
<DeathCustomPriorityList value="RagdollBasicAndGibNoBlood"/>
<DeathCustomPriorityList value="RagdollBasic"/>
<DeathCustomPriorityList value="RagdollBasicAir"/>
<DeathCustomPriorityList value="RagdollSparks"/>
<DeathCustomPriorityList value="RagdollGibSparks"/>
<DeathCustomPriorityList value="RagdollBasicAndGibSparks"/>
<DeathCustomPriorityList value="RagdollAoE"/>
<DeathCustomPriorityList value="RagdollOverkill"/>
<DeathCustomPriorityList value="RagdollOverkillDPRH"/>
<DeathCustomPriorityList value="RagdollOverkillDOI"/>
<DeathCustomPriorityList value="RagdollOverkillGank2x1"/>
<DeathCustomPriorityList value="RagdollBaneling"/>
<DeathCustomPriorityList value="RagdollSiegeTank"/>
<DeathCustomPriorityList value="RagdollUltraUnburrow"/>
<DeathCustomPriorityList value="RagdollSpineCrawlerHurl"/>
<DeathCustomPriorityList value="RagdollFire"/>
<DeathCustomPriorityList value="RagdollAcid"/>
<DeathCustomPriorityList value="RagdollNuke"/>
<DeathCustomPriorityList value="RagdollMidair"/>
<DeathCustomPriorityList value="RagdollUpgraded"/>
<DeathCustomPriorityList value="RagdollUpgradedMidair"/>
<DeathCustomPriorityList value="Low"/>
<DeathCustomPriorityList value="Hallucination"/>
<DeathCustomPriorityList value="Vortex"/>
<DeathCustomPriorityList value="Polymorph"/>
<DeathCustomPriorityList value="Shadow"/>
<DeathCustomPriorityList value="Rescue00"/>
<DeathCustomPriorityList value="Rescue01"/>
<DeathCustomPriorityList value="Rescue02"/>
31.  演算体消息播放动画的最后一个参数覆盖优先级可以将优先级较低的模型动画的优先级调高,避免被其他如Stand等高优先级的动画覆盖。动画的默认优先级可以在过场动画编辑器中播放的模型动画名后面()中的数字找到
32.  附着过的模型在通过设置主体为空后无法通过设置位置来调整模型位置(附着相关测试.SC2Map)
33.  负数取模的值是0减去其绝对值的模的值
35.  行为对于移动速度的修改,其倍率以相乘的方式获得最终结果。(行为对移动速度倍率叠加关系.SC2Map)
36.  行为持续时间覆盖的属性的意义是,按照列表符合最先一条验证器对应的值覆盖当前行为的持续时间。其验证数据是行为应用后的数据(首次应用行为时验证结果是1层行为存在)(行为持续时间覆盖.SC2Map)
37.  行为的抑制攻击效果并不会完全的禁止武器,而是不运行效果,所以当对一个抑制攻击的单位发布攻击命令时,是起效的,只是攻击效果没发生
38.  Marker是否效验与效果的link有关,如果验证使用的是不同的效果树(包括引发效果树的技能或武器),那么只有当效果树从开启marker的效果匹配时,才会进行效验。(Marker测试.SC2Map)
a)  测试地图中独立效果MarkerTestEffectSingle和设置效果MarkerTestEffectSet是添加Marker的效果。其中独立效果由SCV的武器引发,设置效果通过触发添加来测试独立效果的效果树末端效果测试效果副本MarkerTestEffectTestCopy是否会被释放。Marker通过测试应用行为MarkerTestEffectAB来添加行为并维持Marker持续存在。如果设置效果的效果树仅包括设置效果和测试应用行为两个效果(添加Marker和维持Marker),自身不存在测试效果MarkerTestEffectTest(如果存在也会与测试效果副本一样进行Maker验证,哪怕两个链接不同)。这样在应用设置效果后,独立效果的最终测试效果副本不会被使用。所以影响两个效果树的Marker是否彼此影响的是不同效果树种添加Marker的效果的链接(仅此效果,必须相同)以及相应的标旗(暂时未测试),包括具体的效果类型也可以不同
b)  Marker效验的效果不能是Marker添加的效果本身
c)  武器跟效果在Marker上并不会被区分,武器添加的标记和效果添加的标记并不会在验证Marker时被区分(Marker测试武器加Marker.SC2Map)
39.  效果中的标记-时长是在标记正常存在时间基础之上的时长,比如应用行为能够保持添加行为的效果树的效果存在,如果标记-时长为默认值0,那么标记计数在行为被移除后同时移除,如果标记-时长大于0且小于效果的持续时间,那么标记会在到达标记-时长数据项的时间后移除,即不会等到行为被移除。
40.  单位组中的单位死亡时会自动排除,如果死亡单位的死亡时间不为0,则在单位死亡死亡时间后会在所有所在的单位组中删除
41.  当使用Marker作为武器根效果的验证器时,如果使用noMarker验证(标记为0),则目标可以被攻击,当验证不通过时攻击继续进行但是效果不会被使用,如果使用其他Maker验证(标记不为0)则始终无法对目标使用武器。(Marker禁止攻击目标.SC2Map,修改1 验证效果的验证器)其原因在于,Marker效验的前提是在验证前已经在目标身上释放了一个技能/武器/效果,来添加Marker设置,这样才能在其后续的效果树中进行验证。所以当验证器为noMarker时,由于武器筛选目标时,因为对目标进行根效果验证,由于此时武器的Marker数据没有添加,所以可以通过,而当筛选好目标添加效果时,由于武器已经添加了Maker信息,导致验证不通过。反之如果采用Marker为0验证,由于武器筛选目标时没有Maker信息在此之前加入目标单位,所以Marker计数不可能为非0,所以永远无法通过效验。
42.  指令是自动获得的函数能够返回指令获得的来源。以攻击为例,如果命令单位攻击单位,则返回假,如果攻击地面或者目标单位在攻击范围返回真。(指令是自动获得的.SC2Map)

43.  单位进入/离开点事件的点不会随着点的位置变化(移动点)而改变触发的位置,区域进入离开事件则会随着区域的变化而变化(点范围事件测试.SC2Map)

总结地图.rar

216.18 KB, 下载次数: 16

点评

这个必须得顶,可以让人少走很多弯路,对星际2地图编辑技术的发展很重要。  发表于 2016-8-31 11:09
发表于 2016-8-31 11:46:15 | 显示全部楼层
本帖最后由 yxxiaobin 于 2016-9-1 17:28 编辑

补充些东西,序列号沿用孔明的,以便了解是针对那条做的补充。
1.我的经验是:集合效果的子效果其实是独立验证的,也就是说如果效果1没有通过,不影响效果2的验证,如果效果2验证通过了,依然会被执行。另外如果集合效果的子效果全部验证失败,则集合效果将不会被创建,如果技能直接以集合效果为技能效果的话,技能将不允许被施放,但是空的集合效果却被认为是有效的,可以正常创建。
33.这个应该加括号,我第一次看就没明白,琢磨了一下才明白。帮孔明加上括号:负数取模=0-(负数绝对值的模)。如果用语言描述等号右边的式子就是:负数绝对值的模的相反数。
40.单位被移出单位组并不是因为单位死亡,而是单位被移除。所以如果单位死亡时间不为0,则死亡后依然会保留在单位组内,直到过期单位被移除,才会从单位组中移除该单位。

额外补充:
    1.触发器等待的时间是精确的,但是只允许0.0625的整数倍。如果不是整数倍,向上取整。比如等待0.06秒实际相当于等待0.0625秒(变成1倍),而等待0.7秒则相当于等待0.125秒。额外提一下等待0秒,这相当于等待0.03125,但仍会向上取0.0625的整数倍,也就是说一个等待0秒和两个等待0秒,结果都是0.0625,而3个等待0秒和4个等待0秒结果都是0.125。以前一直认为触发器等待时间是精确地,但现在看来,这并不可靠,因为很难保证等待时间是0.0625的整数,尤其是计算得到的等待时间。
    2.和单位进入/离开区域类似,如果对话框项足够小,而鼠标飞快跨越对话框项,可能不会正确触发鼠标进入/离开对话框项事件。
    3.图片对话框控件制作序列动画时,触发器动作“设置对话框项动画时间”不能正常起效。
    4.使用“设置对话框项动画索引”动作指定动画索引时,最后一个索引无效,比如一个动画序列有8帧,你只能使用它的1-7帧,指定第8帧时,仍然显示为第7帧。不过你可以多定义一帧,比如图片实际是8帧,你定义成9帧,使用时只用1-8帧就好。

其实这些细节知识很多,一个人有时候真的很难通过一一尝试的方法全部发现它们。而且有时候,发现一些细节问题,并没有及时做好笔记,可能以后自己要用时还会记得,但是如果要总结一下共享出来就很难想起来了。所以说我个人认为,孔明这篇教程在价值上比以往大家发的那些价值都高,只有这些东西积累的多了,共享的多了,星际2编辑器技术才能真正的获得更多的推广和长足的发展。

回复

使用道具 举报

 楼主| 发表于 2016-8-31 12:38:34 | 显示全部楼层
有些条目是发现了就随手写上,有些确实描述不清。
1、是最早测试的,所以目前也可能发生变化或者当时的测试不完整。具体有时间我再测试下。
24、因为整个SC2的运行频率就是1/16秒,部分(演算体层面)会是1/32。所以如果移动过快,周期间隔内鼠标越过对话框项,就会有这个问题。其实投射物过快也是一样的。
33、是这个意思
40、想要说的是这个意思

6、是说保错“ [Left]的锚点对[XXX]无效”,“无法使用从模板中创建对话框项创建小地图等官方UI”,两个UI报错的原因和解决方法,“ [Left]的锚点对[XXX]无效”这个报错很不稳定,大部分起因是在重载UI的时候将一个父级UI控件的位置时发生的。“无法使用从模板中创建对话框项创建小地图等官方UI”是3.0后某些官方控件,如小地图无法从模板创建了。
36、行为上面有个参数可以设置行为持续时间覆盖,它的作用是根据验证器的最终结果来决定行为的最终持续时间。

回复

使用道具 举报

 楼主| 发表于 2016-8-31 14:49:49 | 显示全部楼层
本帖最后由 疯人¢衰人 于 2016-8-31 15:08 编辑

一些补充说明:
2、不仅仅是行为的周期,包括行为的源单位等添加行为的效果树(包括触发添加行为时源单位等信息)的数据都会记录。所以如果两个单位使用技能各自将一个行为添加到同一个单位,如果行为的效果是发射一个发射物回施法单位,那么会相应的两个单位。
5、只有被触发hook过的UI才会相应UI事件,所以使用模板创建对话框项时,最终能够操作的是其对应根UI(XML结构中)控件。目前似乎没有办法(除了使用路径获取固定UI界面的内容)获取如单位血条等不确定路径的UI控件的子控件的方法。比如你创建一个按钮,你没法获取按钮图片或文本对应的控件。(触发修改按钮的文本图片是另外的事情,这里说的是图片和文本控件本身。)
7、这个报错可以通过修改UI控件大小或文本的字体样式来解决。大部分情况下它只是个警告而已。
8、包括搜索效果和枚举验证器,SC2的逻辑层周期就是1/16。解决的方案只能是在每个周期预测下一位置(成本相当高)。
13、这导致没法通过鼠标坐标和世界坐标来获得屏幕长宽比,以确定UI层分辨率。所以目前没有好的方法来使一个对话框或对话框项的一边全屏,另一边为指定值(如半屏)。这是因为设置对话框项大小父级是一个独立标旗,并不会修改对话框项的实际宽高值。
14、如果使用XMl,可以以知道对所有控件都是如此,(父级隐藏,子级设为显示是怎么样忘记了)
15、特指被触发创建或被触发hook的UI
16、应该是指向了一个特殊的地址,而不是0(null)
17、版本变化可能导致改变。
18、也就是说每个函数中局部引用变量的值(不是对应实力,类似指针地址)是存储在函数对应的栈内的。当子函数结束时会被强制释放。所以如果想要实现类的构造函数的效果来赋值初始值是不行的。这里的变量大部分情况是指结构体,比如在子函数中声明一个结构体,然后用引用返回(作为参数)父级函数,那么在父级函数调用子级函数后这个引用指定的结构体的属性的值是随机的。而如果结构体是在父级函数中声明的,然后通过引用参数在子函数中修改,调用子函数后结构体的值是子函数修改后的结果(实参)
19、这个最大值是在一个函数内的,不包括参数,所以如果你需要使用超限的本地变量,就用数组引用将父级数组作为参数放入子级函数吧,参见18的解释。20、可以用开图器来创建扇形视野,不过暂时没找到随着单位的朝向旋转的方法,另外没法被地形等视野阻碍所阻碍也导致了这个开图器用处有限。
22、另外,如果读native.galaxy,可以了解到区域内的随机点是不可靠的,如果区域过于复杂且有负向区域,最终可能不会获得一个正确的点,而是获得(0,0)。另外叠加区域时负向区域是永恒的,不会被后加入的正区域覆盖掉,大约是最终区域由全部正区域叠加后再叠加负区域来获取最终区域。另外一个复制复杂区域的窍门是,使用添加区域到区域动作将要复制的区域添加到空区域即可。
23、暂时没发现是什么设置导致了这个结果24、以下内容记忆不是太清楚,也就是两个图片,如果A在B上层(A覆盖B),那么鼠标在从B范围进入A范围(没有离开B范围)后,会响应进入A事件,在A范围内离开AB公共范围时不会响应离开B事件,从B以外范围离开A会响应离开A事件,然后离开B事件就没有了,除非再次进入B。
25、大约因此暴雪没有提供创建触发的函数,而是用Galaxy的话是有对应API的。
27、是达到鼠标点击可以点击到单位覆盖的后面的单位。
32、暂且没有发现恢复方法,可以将附着过的演算体附着到一个未附着过的演算体来设置位置(临时解决方案)。
34、序号出错……
38、这是实现希望将一个指定单位从另外一个单位的武器主动攻击列表中移除的时候测试到的结果。目前没找到方法使一个单位的目标单位在可以被其它单位(比如同玩家的同单位类型的其它单位)作为攻击目标时让这个单位的武器不会将目标单位作为目标。


额外的一条
44、Debug窗口中点变量的值显示的X和Y是相反的,所以如果显示的值是(1,2)其点的真正坐标是(2,1)



回复

使用道具 举报

发表于 2016-8-31 20:47:34 | 显示全部楼层
最近想学习一下你提到的让自定义动作不形成函数的方案,你能给个演示吗?
回复

使用道具 举报

 楼主| 发表于 2016-8-31 21:15:34 | 显示全部楼层
本帖最后由 疯人¢衰人 于 2016-8-31 21:17 编辑
yxxiaobin 发表于 2016-8-31 20:47
最近想学习一下你提到的让自定义动作不形成函数的方案,你能给个演示吗?

附件里的“引用作为参数类型.SC2Map”就是一个典型的例子。
具体的宏语法可以看http://bbs.islga.org/forum.php?mod=viewthread&tid=177329另外可以看看库中如循环、if结构、还有算法(运算符)之类的写法,都是不错的例子

点评

初步学习了一下,虽然还没有真正学会,但是已经初步认识到宏的强大了。感谢传送门,另外求孔明有时间写一篇详细的教程,造福下论坛的芸芸众生吧。  发表于 2016-9-1 12:56
回复

使用道具 举报

发表于 2016-8-31 21:38:20 | 显示全部楼层
其实虚空之后已经在行为里提供了加法叠加的移速和加速参数了,感觉是为了隔壁风暴。还有很多其他参数,也应该是隔壁用的。暴爹还是只有自己用的到的时候,才会加功能进去……
回复

使用道具 举报

发表于 2016-8-31 21:39:13 | 显示全部楼层
完全看不懂GG
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 06:52 , Processed in 0.271579 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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