一、数组

这玩意其实没什么讲的,因为在大部分编程语言里意义是一样的:使用单独的变量名来存储一系列的值。

1、我们接着之前的演示图,在BianLiang.ts里自定义一个字符串数组。保存BianLiang.ts。

static mingzi:string[] = [];
2、我们在Move.ts里添加一些触发动作。保存Move.ts。
        BianLiang.mingzi[0]='张三';
        BianLiang.mingzi[1]='李四';
        BianLiang.mingzi[2]='王麻子';
        DisplayTextToPlayer(Player(0), 0, 0,BianLiang.mingzi[0]);
        DisplayTextToPlayer(Player(0), 0, 0,BianLiang.mingzi[1]);
        DisplayTextToPlayer(Player(0), 0, 0,BianLiang.mingzi[2]);
3、运行查看效果。
[danger]注意事项:数组变量在获取属性前要加上对空值判断![/danger]

二、触发

(一)太阳编辑器的触发语法

其实我们在《太阳编辑器学思笔记2:全局变量》三、太阳编辑器调用war3map.d.ts中的全局变量中已经学习过一次。我们再温习一次。

export default class 类名{
    constructor() {
        let trigger = new Trigger()
        trigger.registerTimerEvent(1, false)
        trigger.addAction(this.action)
    }
    action(this: void) {
    }
}
  • export default class 类名                   //创建1个名为Move的类并导出
  • constructor() {     }                              //构造函数【为什么使用构造函数的扩展阅读可以访问《太阳编辑器学思笔记1:TypeScript编程语言》
  • let trigger = new Trigger()                //新建触发
  • trigger.registerTimerEvent(1, false) //触发事件.注册计时器事件(秒,是否循环),registerTimerEvent是TS的表达方式,相当于JASS的TriggerRegisterTimerEvent。          //【扩展阅读可以访问左侧树形栏的solar/w3ts/handles/trigger】
  • trigger.addAction(this.action)          //添加触发器动作,addAction是TS的表达方式,相当于JASS的TriggerAddAction
  • action(this: void) {     }                      //执行触发动作。所以触发动作是写这里面。

(二)太阳编辑器的触发事件

上面我们解释了trigger.registerTimerEvent是注册计时器事件,那么其他触发事件怎么写呢?

答:查看太阳编辑器的触发框架:位于solar/w3ts/handles/trigger

如果你是用VScode打开的实例Move2.ts,那么右键点击文件内容上方的导入模块代码“import {Trigger} from "solar/w3ts/handles/trigger";”,选择“转到定义”,可以快速跳转到trigger.ts

下面我们来用个实例说明下:

[info]实例目标:新建一个Move3.ts并改写其中的触发模块,触发事件:单位进入区域[R],触发条件:判断触发单位是否为蒸汽车,触发动作:摧毁神秘宝藏室[/info]

有了前两章的学习,我们省略如何新建Move3.ts,如何在App.ts里调用Move3.ts,直接上触发代码:

import { Trigger } from "solar/w3ts/handles/trigger";
export default class Move3 {
    constructor() {
        let t = new Trigger()
        t.registerEnterRect(gg_rct_jihe)
        t.addCondition(Condition(this.condition))
        t.addAction(this.action)
    }
    condition(this: void){
        return (IsUnit(GetTriggerUnit(), gg_unit_hmtt_0002) == true)
    }
    action(this: void) {
        KillUnit(gg_unit_hvlt_0001);
        DisplayTextToPlayer(Player(0),0,0,'神秘宝藏室被摧毁1')
    }
}
上面是太阳编辑器的写法,导入了一个trigger的框架,从而语法更加的简洁。下面是JASS转TS的写法。
export default class Move3 {
    constructor() {
        let t = CreateTrigger();
        TriggerRegisterEnterRectSimple(t,gg_rct_jihe)
        TriggerAddCondition(t, Condition(Move3.Conditions));
        TriggerAddAction(t, Move3.action);
    }
       static Conditions(this: void): boolean {
        return (IsUnit(GetTriggerUnit(), gg_unit_hmtt_0002) == true);
    }
    static action(this: void) {
        KillUnit(gg_unit_hvlt_0001);
        DisplayTextToPlayer(Player(0), 0, 0, '神秘宝藏室被摧毁')
    }
}

(二)太阳编辑器的触发条件

结合上面的案例,这里展示下触发条件更为简洁的箭头函数写法。
太阳编辑器写法:
     t.addCondition(Condition(() => {
            return (IsUnit(GetTriggerUnit(), gg_unit_hmtt_0002) == true)
     }))
JASS转TS写法:
    TriggerAddCondition(t,Condition(() => {
    return (IsUnit(GetTriggerUnit(), gg_unit_hmtt_0002) == true)
     }))

(三)太阳编辑器的触发动作

如果触发动作要写成箭头函数,则如下:

        t.addAction(() => {
            KillUnit(gg_unit_hvlt_0001);
            DisplayTextToPlayer(Player(0),0,0,'神秘宝藏室被摧毁2.5')
        })

四、演示地图下载

http://d.norpg.com/f/36218790-689120451-65a505?p=3826 (访问密码: 3826)