一、条件
实例:
事件:玩家输入任意数字
动作:如果大于100,则显示“V我50!”,如果不足100,则显示“金钱不足!”。
(一)if语句
JASS转TS语法表达如下:
export default class Gold {constructor() {let t = CreateTrigger();TriggerRegisterPlayerChatEvent( t , Player(0), "", true);TriggerAddAction( t , Gold.action);}static action(this:void) {if ((S2I(GetEventPlayerChatString()) >= 100))DisplayTextToPlayer(Player(0), 0, 0, "V我50疯狂星期四!");if ((S2I(GetEventPlayerChatString()) < 100))DisplayTextToPlayer(Player(0), 0, 0, "金钱不足!");}}
太阳编辑器框架语法表达:
import { MapPlayer } from "solar/w3ts/handles/player"import { Trigger } from "solar/w3ts/handles/trigger"export default class Gold {constructor() {let t = new Trigger()t.registerPlayerChatEvent(MapPlayer.fromIndex(0), '', false)t.addAction(this.action)}action(this: void) {if (S2I(GetEventPlayerChatString()) >= 100)DisplayTextToPlayer(Player(0), 0, 0, 'V我50疯狂星期四!')if (S2I(GetEventPlayerChatString()) < 100)DisplayTextToPlayer(Player(0), 0, 0, '金钱不足!')}}
[info]知识点:使用太阳编辑器的registerPlayerChatEvent的第一个参数是MapPlayer类型,而这个类型需要从"solar/w3ts/handles/player"中导入。我们Ctrl+鼠标左键这个相对地址,查看player.ts文件会发现MapPlayer是Handle<player>的子类。进一步查找会发现类似JASS转TS的Player(0)对应的是fromIndex。由于我们刚开始用太阳编辑器,代码还不太熟悉,相信将来能熟能生巧![/info]
(二)if……else语句
import { MapPlayer } from "solar/w3ts/handles/player"import { Trigger } from "solar/w3ts/handles/trigger"export default class Gold {constructor() {let t = new Trigger()t.registerPlayerChatEvent(MapPlayer.fromIndex(0), '', false)t.addAction(this.action)}action(this: void) {if (S2I(GetEventPlayerChatString()) >= 100)DisplayTextToPlayer(Player(0), 0, 0, 'V我50疯狂星期四!')elseDisplayTextToPlayer(Player(0), 0, 0, '金钱不足!')}}
二、循环
实例:
事件:玩家输入数字xh
动作:循环12次创建1个步兵单位。
(一)for循环
老规矩,我们先来看看JASS转TS语法表达如下:
export default class Gold {constructor() {let t = CreateTrigger();TriggerRegisterPlayerChatEvent( t , Player(0), "xh", true);TriggerAddAction( t , Gold.action);}static action(this:void) {bj_forLoopAIndex = 1;bj_forLoopAIndexEnd = 12;while (true) {if (bj_forLoopAIndex > bj_forLoopAIndexEnd) break;CreateNUnitsAtLoc(1, FourCC('hfoo'), Player(0), GetRectCenter(GetPlayableMapRect()), bj_UNIT_FACING);bj_forLoopAIndex = bj_forLoopAIndex + 1;}}}
太阳编辑器框架语法表达:
import { MapPlayer } from "solar/w3ts/handles/player"import { Trigger } from "solar/w3ts/handles/trigger"export default class Gold {constructor() {let t = new Trigger()t.registerPlayerChatEvent(MapPlayer.fromIndex(0), 'xh', false)t.addAction(this.action)}action(this: void) {for (let i = 1; i < 13; i++) {CreateNUnitsAtLoc(1, FourCC('hfoo'), Player(0), GetRectCenter(GetPlayableMapRect()), 270);}}}
[info]知识点:从上面我们可以再一次感受到TypeScript 语言的简洁,2行代码实现了JASS语言6行代码的效果。温习TypeScript 循环语法可以访问菜鸟教程:TypeScript 循环 | 菜鸟教程 (runoob.com)[/info]
(二)while循环
while循环和for循环最大的不同就是条件语句的写法。当条件为 false 时,会跳过循环主体,直接执行紧接着 while 循环的下一条语句。
import { MapPlayer } from "solar/w3ts/handles/player"import { Trigger } from "solar/w3ts/handles/trigger"export default class Gold {constructor() {let t = new Trigger()t.registerPlayerChatEvent(MapPlayer.fromIndex(0), 'xh', false)t.addAction(this.action)}action(this: void) {let i = 1;while (i < 13) {CreateNUnitsAtLoc(1, FourCC('hfoo'), Player(0), GetRectCenter(GetPlayableMapRect()), 270);i++;}}}
三、演示地图下载
Gold.ts文件里写了几个触发,可以通过选中——Ctrl+/快速注释或取消注释一一尝试。
http://d.norpg.com/f/36218790-690597023-834881?p=3826 (访问密码: 3826)