[animation] 动画素材:闪电攻击

闪电攻击是攻击动画中的一种,实现它分两个步骤:

1)编写WML。在要能闪电攻击兵种的[unit_type]块中增加一个表示闪电攻击的[attack_anim]

2)绘制相关图像。

闪电攻击WML定义,摘自咒术师兵种

[unit_type]
	......
	{DUDU_LIGHTNING 1}
	{DUDU_LIGHTNING 2}
	{DUDU_LIGHTNING 3}
	......
[/unit_type]

宏:DUDU_LIGHTNING

#define DUDU_LIGHTNING DIRECTION_NUMBER
[attack_anim]
	[filter_attack]
		name=lightning
	[/filter_attack]

	{LIGHTNING_BOLT {DIRECTION_NUMBER} }

	[if]
		hits=yes
		[frame]
			begin=-300
			end=-200
			image="units/human-kingdom/zhoushushi-ranged1.png"
			sound=lightning.ogg
		[/frame]
	[/if]
	[else]
		hits=no
		[frame]
			begin=-300
			end=-200
			image="units/human-kingdom/zhoushushi-ranged1.png"
			sound=lightning-miss.ogg
		[/frame]
	[/else]
	[frame]
		begin=-200
		end=-100
		image="units/human-kingdom/zhoushushi-ranged2.png"
	[/frame]
	[frame]
		begin=-100
		end=100
		image="units/human-kingdom/zhoushushi-ranged1.png"
	[/frame]
[/attack_anim]
#enddef

宏:LIGHTNING_BOLT

#define LIGHTNING_BOLT DIRECTION_NUMBER

[if]

direction=sw,s,se

 

[missile_frame]

begin=-250

end=150

halo=halo/lightning-bolt-{DIRECTION_NUMBER}-1.png~FL(vert):100,halo/lightning-bolt-{DIRECTION_NUMBER}-2.png~FL(vert):100,halo/lightning-bolt-{DIRECTION_NUMBER}-3.png~FL(vert):100,halo/lightning-bolt-{DIRECTION_NUMBER}-4.png~FL(vert):100

halo_y=-125

offset=1.0

[/missile_frame]

[/if]

[else]

direction=nw,n,ne

 

[missile_frame]

begin=-250

end=150

halo=halo/lightning-bolt-{DIRECTION_NUMBER}-1.png:100,halo/lightning-bolt-{DIRECTION_NUMBER}-2.png:100,halo/lightning-bolt-{DIRECTION_NUMBER}-3.png:100,halo/lightning-bolt-{DIRECTION_NUMBER}-4.png:100

halo_y=-125

offset=1.0

[/missile_frame]

[/else]

#enddef

 

一、LIGHTNING_BOLT

LIGHTNING_BOLT中含有[if]/[else],它是个要被预扩展宏,预扩展根据是攻击方向参数,direction。

上图中诸葛亮是攻击方,司马炎是防御方,这时诸葛亮向北攻击,满足direction=nw,n,ne(n:north)这个条件。针对direction=nw,n,ne,DIRECTION_NUMBER=2,它展开的宏是:

[missile_frame]
	begin=-250
	end=150
	halo=halo/lightning-bolt-2-1.png:100,halo/lightning-bolt-2-2.png:100,halo/lightning-bolt-2-3.png:100,halo/lightning-bolt-2-4.png:100
	halo_y=-125
	offset=1.0
[/missile_frame]

[missile_frame]在[attack_anim]这个动画标签的直接根下,且满足支画线画帧[xxx_frame]命名约定,它的画帧前缀是“missile_”,因而它可以自成一条画线。这条画线显示类型是光环(halo),持续时间400毫秒(150-(-250)),其图像显示规则:

[-250...-150):显示图像lightning-bolt-2-1.png;

[-150...-50):显示图像lightning-bolt-2-2.png;

[-50...50):显示图像lightning-bolt-2-3.png;

[50...150):显示图像lightning-bolt-2-4.png;

以下依次是lightning-bolt-2-1/2/3/4.png,四个图像同尺寸,都是200 x 360

 

halo_y字段

让对比halo_y=-125和halo_y=0时的两种情况:(为了清晰看到halo图像被叠加到哪里,对该图像加了红框)

halo_y=-125

halo_y=0

halo_y:以像素为单位,光环相对于单位中心在Y方向上的偏移值。在上两幅图中,相比halo_y=0,halo_y=-125把光环(中心点)向上挪了125像素。

 

offset字段

让再看halo_y=0,offset=0.0时图像,把它和halo_y=0,offset=1.0对比看(不是halo_y=-125,halo_y=0时和格子边界对齐,比较起来较直观)

halo_y=0,offset=0.0

offset:相对于A面向的格子图像位置偏移。0.0,显示光环(中心点)在格子中心;1.0,光环在面向的格子的中心;-1.0,光环中心点在A的背向格子。

以上实例表现出来就是光环中心从司马炎变成了诸葛亮。这里因为方向是正北,offset在X方向上不产生作用,实现效果等同halo_y。

当halo_x,halo_y,offset都为0时,光环中心点在原格子。

全部评论: 0

    写评论: