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

 找回密码
 点一下
查看: 3720|回复: 17

【提问】想用一个单独的actor给某单位染色,应该怎么做?(完美解决)

[复制链接]
发表于 2011-3-5 20:42:53 | 显示全部楼层 |阅读模式
建立了一个CActorModel,事件设为:
Behavior.XXX_Behavior.On      SetTintColor 255,0,0
Behavior.XXX_Behavior.Off     SetTintColor NULL


某buff生效时,单位变成红色,buff结束后,染色恢复

但是这不是单位自己的actor,想要单独一个actor,但是无效果
那么还需要怎么写,能生效
发表于 2011-3-5 21:20:47 | 显示全部楼层
嗯?完全不理解你的意思。具体的举例说说你到底想怎么做呢?
回复

使用道具 举报

 楼主| 发表于 2011-3-5 22:51:03 | 显示全部楼层
某单位A,有行为(buff)B时,染色为红色
当A身上的B到期或被移除时,取消染色(即变为原本的颜色)

而用于处理染色的actor是单独的,而不是在A的actor里添加事件

继而,可以扩展为任意单位,只要拥有该buff,就会被染色成红色
回复

使用道具 举报

发表于 2011-3-5 23:35:10 | 显示全部楼层
这个很容易~~

关键在于~~发送消息的时候要指明target~~但是不同单位有不同的Actor名~~我们不可能为每一个单位的actor都写一个target。

于是这时候别名的强大之处就体现出来了~~直接发送给_Unit就好~~因为所有单位的actor默认都有_Unit这一别名~~


这个buff的actor用一个CActorSimple类就能解决~~而不需要CActorModel~~能省多少资源就省多少资源嘛~~



发个演示~~按下ESC后地图上所有单位会被附加一个叫Red的buff~~在此buff的持续时间内~~拥有这个buff的单位会变成红色~~等到持续时间到期后会变回正常的颜色~~
Screenshot2011-03-05 23_26_58.jpg
Screenshot2011-03-05 23_27_03.jpg

Color Buff.SC2Map

15 KB, 下载次数: 83

回复

使用道具 举报

 楼主| 发表于 2011-3-5 23:38:03 | 显示全部楼层
膜拜麦子~~~~~~~
回复

使用道具 举报

发表于 2011-3-5 23:40:13 | 显示全部楼层
[codes=xml]
    <CActorSimple id="Red">
        <On Terms="Behavior.Red.On" Send="Create"/>
        <On Terms="Behavior.Red.On" Target="_Unit" Send="SetTintColor 255,0,0"/>
        <On Terms="Behavior.Red.Off" Target="_Unit" Send="SetTintColor 255,255,255"/>
        <On Terms="Behavior.Red.Off" Send="Destroy"/>
    </CActorSimple>
[/codes]

整个Actor只需要4句话。
回复

使用道具 举报

发表于 2011-3-5 23:54:12 | 显示全部楼层
CActorSimple 用来做统一动画和颜色 是很简便的
如果需要在统一设定基础上做个别设定 也只需加入一些ValidateUnit就好呢
回复

使用道具 举报

 楼主| 发表于 2011-3-6 00:04:12 | 显示全部楼层
加入计时器,终于完成了,免伤期间红光闪烁的效果

谢谢麦子,谢谢chilled
回复

使用道具 举报

 楼主| 发表于 2011-3-6 00:08:26 | 显示全部楼层
PS:重复set同名Timer,会造成泄漏么?
当然,在行为结束时对timer执行了kill
但是在行为持续期间,2个Timer是重复Set的,会不会泄漏?

[code=xml]
    <CActorSimple id="UnitChangeColor_Actor">
  <On Terms="Behavior.UnitMissDamage_Behavior.On" Send="Create"/>
  <On Terms="Behavior.UnitMissDamage_Behavior.Off" Send="Destroy"/>
  <On Terms="Behavior.UnitMissDamage_Behavior.On" Target="_Unit" Send="SetTintColor {255,0,0 2.000000}"/>
          <On Terms="Behavior.UnitMissDamage_Behavior.Off" Target="_Unit" Send="SetTintColor 255,255,255"/>
          <On Terms="Behavior.UnitMissDamage_Behavior.On" Send="TimerSet 0.200000 RedTimer01"/>
          <On Terms="TimerExpired; TimerName RedTimer01" Target="_Unit" Send="SetTintColor 255,255,255"/>
          <On Terms="TimerExpired; TimerName RedTimer01" Send="TimerSet 0.200000 RedTimer02"/>
          <On Terms="TimerExpired; TimerName RedTimer02" Target="_Unit" Send="SetTintColor {255,0,0 2.000000}"/>
          <On Terms="TimerExpired; TimerName RedTimer02" Send="TimerSet 0.200000 RedTimer01"/>
          <On Terms="Behavior.UnitMissDamage_Behavior.Off" Send="TimerKill RedTimer01"/>
          <On Terms="Behavior.UnitMissDamage_Behavior.Off" Send="TimerKill RedTimer02"/>
    </CActorSimple>
[/code]
回复

使用道具 举报

发表于 2011-3-6 00:18:14 | 显示全部楼层
要做红光闪烁根本用不着这些Timer

还是4句话解决问题。

[codes=xml]
    <CActorSimple id="Red">
        <On Terms="Behavior.Red.On" Send="Create"/>
        <On Terms="Behavior.Red.On" Target="_Unit" Send="SetTintColor {255,0,0 2.000000} 0.300000 Bounce"/>
        <On Terms="Behavior.Red.Off" Target="_Unit" Send="SetTintColor 255,255,255"/>
        <On Terms="Behavior.Red.Off" Send="Destroy"/>
    </CActorSimple>
[/codes]

0.3是变色频率。越小频率越高。

Color Buff.SC2Map

15 KB, 下载次数: 34

回复

使用道具 举报

 楼主| 发表于 2011-3-6 00:37:07 | 显示全部楼层
原来SetTintColor自带这功能啊

撇开闪烁的命题,重复set同名计时器,会泄漏么?
回复

使用道具 举报

发表于 2011-3-6 00:53:31 | 显示全部楼层
Galaxy里不存在泄漏的问题,Actor里更没有了。

更何况你就算想要删除Timer也做不到~~Timer是自主删除的~~
回复

使用道具 举报

 楼主| 发表于 2011-3-6 01:05:19 | 显示全部楼层
那为什么要kill Timer?
回复

使用道具 举报

发表于 2011-3-6 01:14:14 | 显示全部楼层
那个是强制中断现在正在走的计时器用的。

比如你让一个计时器走起来了,又突然不想要它到期之后触发Actor事件了,那么你就可以半路Kill之。已经到期的Timer用不着Kill。
回复

使用道具 举报

 楼主| 发表于 2011-3-6 01:24:45 | 显示全部楼层
明白了~~~
回复

使用道具 举报

发表于 2011-3-6 13:40:37 | 显示全部楼层
假如一些融入時間效果會更好。
回复

使用道具 举报

发表于 2011-3-7 11:17:56 | 显示全部楼层
我也一直在求楼主这个问题,不然每个单位actor都要写那不是累死人···
回复

使用道具 举报

发表于 2011-3-7 13:08:19 | 显示全部楼层
CActorSimple 或者Macros都可以实现的呢~

但实际上真正做特效的时候 大多還是需要一个一个去调整的。
透明度、颜色层、动画Cmd根据不同的模型的则很多需要单独设定~
在CActorSimple和Macros 中会常用到ValidateUnit来进行类似于Case的过滤。

这里因为是红色也就是很亮的原色,可以轻易覆盖原有的表层色彩,因此统一容易些
可以仔细看Renee的例子,实际每个单位变色后也并非完全相通的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 20:39 , Processed in 0.129912 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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