一、数组

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

})

四、演示地图下载

(已过期)