CoreT1Radar脚本分析 - from fonter456

//下面TA-EXCESS II alpha1e版的CORE的T1雷达的脚本,估计每个版本的都一样,如果你的版本不一样也可以对照看看
//解析这个脚本的目的是介绍:如何简化非45度的运动?
//有没有这样的经验?45度运动好做,但60度等就不那么好做了,下面介绍一个很简单的方法
#define TA
#include “sfxtype.h”
#include “exptype.h”
piece base, tower, radar, dish1pitch, dish1, dish2turn, dish2pitch, dish2, dish3turn, dish3pitch, dish3;
SmokeUnit(HealthPercent, SleepTime)
{
while( get BUILD_PERCENT_LEFT )
{
sleep 500;
}
while( TRUE )
{
HealthPercent = get HEALTH;
if( HealthPercent < 60 )
{
emit-sfx 256 | 1 from dish1;
SleepTime = 350;
}
if( HealthPercent < 30 )
{
emit-sfx 256 | 2 from radar;
emit-sfx 256 | 2 from dish3;
SleepTime = 250;
}
sleep SleepTime;
}
}
Create()
{
dont-shade tower;
dont-shade radar;
dont-shade dish1;
dont-shade dish2;
dont-shade dish3;

turn dish2turn to y-axis <-120.00> now; //绕Y轴“逆”时针转120,立刻
turn dish3turn to y-axis <120.00> now; //绕Y轴“顺”时针转120,立刻
start-script SmokeUnit();
}
//这是最重要之处,这是一个3探测头的雷达,3个探测头隔120分布一个。作者做模型故意把3个探测头重叠起来都做在正对Z轴的方向,也就是正前方,在初生时将3个头中的两个转120度。你是不是奇怪作者为什么这样做呢?为什么不直接做一个分布好的模型呢?

TurnDishes()
{
set-signal-mask 2; // 设置为信号2
while( TRUE )
{
turn dish1pitch to x-axis <-20.00> speed <10.00>;
turn dish2pitch to x-axis <10.00> speed <10.00>;
turn dish3pitch to x-axis <0.00> speed <10.00>;
sleep 2000;
turn dish1pitch to x-axis <10.00> speed <10.00>;
turn dish2pitch to x-axis <-20.00> speed <10.00>;
turn dish3pitch to x-axis <-10.00> speed <10.00>;
sleep 2000;
turn dish1pitch to x-axis <0.00> speed <10.00>;
turn dish2pitch to x-axis <0.00> speed <10.00>;
turn dish3pitch to x-axis <0.00> speed <10.00>;
sleep 2000;
turn dish1pitch to x-axis <-10.00> speed <10.00>;
turn dish2pitch to x-axis <-10.00> speed <10.00>;
turn dish3pitch to x-axis <-20.00> speed <10.00>;
sleep 2000;
turn dish1pitch to x-axis <0.00> speed <10.00>;
turn dish2pitch to x-axis <0.00> speed <10.00>;
turn dish3pitch to x-axis <10.00> speed <10.00>;
sleep 2000;
}
}
//看完上面这段估计你就明白为什么了,上面这段全是绕X轴转动,就是向Z(前后)摇摆。具体参考游戏中的动作。可见,只要通过在Create()中加“立刻转动”这样的方式,在后面描述运动的过程中,就可以把已经转了120度的部件当成没有转动看待。

TurnRadar()
{
set-signal-mask 2; // 设置为信号2
while( TRUE )
{
turn radar to y-axis <30.00> speed <20.00>;
sleep 6000;
turn radar to y-axis <-60.00> speed <20.00>;
sleep 6000;
turn radar to y-axis <0.00> speed <20.00>;
sleep 6000;
turn radar to y-axis <60.00> speed <20.00>;
sleep 6000;
turn radar to y-axis <-30.00> speed <20.00>;
sleep 6000;
turn radar to y-axis <0.00> speed <20.00>;
sleep 6000;
}
}
//水平转动中心部件,具体参考游戏中的动作
Activate() //活动
{
start-script TurnDishes(); //启动TurnDishes()这个小脚本
start-script TurnRadar(); //启动TurnRadar()这个小脚本
}
Deactivate() //不活动
{
signal 2; //杀掉信号2的脚本,避免占内存
turn radar to y-axis <0.00> speed <20.00>;
turn dish1pitch to x-axis <0.00> speed <10.00>;
turn dish2pitch to x-axis <0.00> speed <10.00>;
turn dish3pitch to x-axis <0.00> speed <10.00>; //上面4句的作用是让各个部件返回初始位置
}
SweetSpot(PieceNum)
{
PieceNum = tower;
}
Killed(Severity, CorpseType)
{
if( Severity <= 50 )
{
CorpseType = 1;
explode radar type BITMAPONLY | BITMAP3;
explode dish1 type BITMAPONLY | BITMAP5;
explode dish2 type BITMAPONLY | BITMAP5;
explode dish3 type BITMAPONLY | BITMAP5;
return (0);
}
CorpseType = 2;
explode tower type SHATTER | BITMAP5;
explode dish2turn type BITMAPONLY | BITMAP1;
explode radar type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode dish1 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode dish2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
explode dish2 type FALL | SMOKE | EXPLODE_ON_HIT | BITMAP1;
}

//从上面我们可以看到,对于120度这样的方向的运动来说,我们预先在做模型时将部件做到正前方,在Create()里面加个立刻转动120,这样就能在后面的脚本中不需要指定角度了,省事很多。
//注意:在Create()里面加“now(立刻)”这种运动的话,单位在被建造过程中就会以转动后的姿态呈现。
CoreT1Radar.rar (3.21 KB)
CoreT1Radar.jpg