找回密码
 点一下
查看: 1243|回复: 7

[求解惑]关于建造/变形的动画……

[复制链接]
发表于 2011-3-31 19:54:25 | 显示全部楼层 |阅读模式
建造和部分变形(如虫族地堡的扎根),不是瞬间完成的,而是有持续时间的,这个持续时间,不同的单位不一定相等。

而建造/变形动画很多情况下,同类的建造,模型是公用的。

也就是说,建造/变形动画的持续时间是固定的。

一般,这种模型的动画主要分成3部分(动画名以变形为例,建造类似)
开始建造/开始变形: MorphStart  (钢架从地下升起、蛹壁包裹起来)
建造中/变形中:        Morph          (钢架上的机械臂四处焊接、虫蛹蠕动)
建造完成/变形结束: MorphEnd    (钢架落下、虫蛹破开)
(当然实际模型中,每个部分,特别是【建造中】可能还有细分的动画,比如A阶段B阶段C阶段)

开始建造或变形时先播放一遍MorphStart,然后循环播放Morph,当快结束时播放MorphEnd

动画MorphEnd播放结束时,整个建造/变形过程也恰好结束(即:进度条正好走满)

————————————————
由于每个单位的建造/变形时间不相等,除了MorphStart和MorphEnd的动画只有一遍,Morph是循环的,循环的时间并不确定,要看单位具体的建造时间。

但是何时clearMorph掉转而播放MorphEnd呢?如果用AbilMorph.XXX.Finish,则太晚了

于是问题是:如何把握播放MorphEnd的时刻?(actor是如何得知Morph该循环多久?)


[codes=xml]
        <On Terms="AbilMorph.VikingMechRepair.Start" Send="Create"/>
        <On Terms="AbilMorph.VikingMechRepair.Finish" Send="Destroy"/>
        <On Terms="AbilMorph.VikingMechRepair.Cancel" Send="Destroy"/>
        <On Terms="ActorCreation" Send="AnimPlay RepairStart Morph,Start"/>
        <On Terms="AnimDone; AnimName RepairStart" Send="AnimPlay Repair Morph,Stand PlayForever"/>
        <On Terms="AAA" Send="AnimClear Repair"/>
        <On Terms="AAA" Send="AnimPlay RepairEnd Morph,End"/>
[/codes]
代码中的AAA该怎么写?
发表于 2011-3-31 22:01:45 | 显示全部楼层
这东西不是用一般的Actor事件实现的。

有专门的类CActorProgress。举例来说,人类的建造。


[codes=xml]
    <CActorProgress id="TerranConstruction">
        <On Terms="Abil.TerranBuild.BuiltStart" Send="Create"/>
        <On Terms="Abil.BarracksAddOns.BuiltStart" Send="Create"/>
        <On Terms="Abil.FactoryAddOns.BuiltStart" Send="Create"/>
        <On Terms="Abil.StarportAddOns.BuiltStart" Send="Create"/>
        <On Terms="Abil.MachineShop.BuiltStart" Send="Create"/>
        <On Terms="ProgressLevel.TerranConstruction.Start; Level 0" Send="SetTransferOverrideAnim Build,A,Stand"/>
        <On Terms="ProgressLevel.TerranConstruction.Stop; Level 0" Send="SetTransferOverrideAnim"/>
        <StageArray AnimProps="Build,A,Start" BlendTime="0.000000"/>
        <StageArray AnimProps="Build,A,Stand"/>
        <StageArray AnimProps="Build,B,Start"/>
        <StageArray AnimProps="Build,B,Stand"/>
        <StageArray AnimProps="Build,C,Start"/>
        <StageArray AnimProps="Build,C,Stand"/>
        <StageArray AnimProps="Build,D"/>
    </CActorProgress>
[/codes]

直接分7个阶段,每个阶段一个动画。
回复

使用道具 举报

 楼主| 发表于 2011-3-31 22:36:40 | 显示全部楼层
那么7个阶段是怎么划分时间的呢?actor怎么知道每个阶段持续多久呢?
回复

使用道具 举报

发表于 2011-3-31 22:38:02 | 显示全部楼层
太简单了,直接平分。当然你也可以自己指定BlendTime
回复

使用道具 举报

发表于 2011-3-31 22:38:55 | 显示全部楼层
你可以随便决定阶段数量,所以时间控制是很容易的。
回复

使用道具 举报

 楼主| 发表于 2011-3-31 22:42:43 | 显示全部楼层
<On Terms="Abil.TerranBuild.BuiltStart" Send="Create"/>

只说了当某建造技能开始建造时创建,摧毁是在哪定义的?

话说这个类型的actor没地方设置用哪个模型的说啊?
回复

使用道具 举报

 楼主| 发表于 2011-3-31 23:29:41 | 显示全部楼层
话说,,不论是不是建造,如果魔法效果需要有结束/完成动画的,都需要用Progress类型的actor?
回复

使用道具 举报

发表于 2011-4-1 01:17:08 | 显示全部楼层
这东西用不着摧毁,scope结束它自己也就挂了。

模型也不是它自己设定的。而是由其宿主决定,它只是帮宿主来决定动作而已。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 21:32 , Processed in 0.049298 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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