一、数组
这玩意其实没什么讲的,因为在大部分编程语言里意义是一样的:使用单独的变量名来存储一系列的值。 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')
})
四、演示地图下载
(已过期)