哇噢星球

 找回密码
 申请注册
搜索
热搜: 地形 技能 Lua

YDWE自带Lua教程第二课:lua模板基础

[复制链接]
皇家骑士 发表于 2019-5-26 13:36:34 | 显示全部楼层 |阅读模式
[Jass] 纯文本查看 复制代码
// 第二课,这次让我们忘掉物编读取吧,首先学习lua模版的使用。

function Test1 takes nothing returns nothing
    // 首先看个简单的
    local integer a = <?= 1+1 ?>
    // 可以看出,其实就是<?= ?>内的语句在地图保存的时候被执行了,其结果替换到原处
    
    local integer b = <?= math.max(2, 5) ?>
    // <?= ?>内的是lua语句,你可以用任何符合lua语法的表达式,具体可以参考lua的教程
    
    local string c = "<?= 1+2 ?>"
    // 即使是在字符串内使用 <?= ?>,也是可以的
    
    local string s = "<?= string.format('<%d> it is a string', math.max(2, 5)) ?>"
    // string.format是lua的一个内置函数,很实用,以后我们还会用到它
endfunction

function Test2 takes nothing returns nothing
    // 注意到<?= ?>的等号,其实<? ?>也是符合lua模版语法的符号
    // 记住它们之间的关系和区别
    //   <? ?> 内的语句在地图保存的时候被执行,不会产生任何结果在Jass代码里
    //   <?= ?>内的语句在地图保存的时候被执行,其结果替换到原处
    // 既然<? ?>不会产生结果,那么它有什么用呢,答案就是充当控制语句,接下来,
    // 你将会看到更多的lua语法
    
    <? local X = 1 ?>
    // 定义了一个lua的局部变量,可以看到这和Jass的定义方式很相似,唯一区别是在
    //    lua里我们不需要声明变量的类型
    
    local integer a = <?= X ?>
    // 然后我们可以在别的地方使用刚才定义的变量
    
    <? X = X + 1 ?>
    // 修改变量的值,和Jass的区别是,我们不需要写set了
    
    <?
        X = 100
    ?>
    // <? ?> <?= ?>都是可以跨行的
    
    <? if X > 0 then ?>
    local string b = "X > 0"
    <? elseif X < 0 then ?>
    local string b = "X < 0"
    <? end ?>
    // 条件控制语句,和Jass的区别只在于end和endif的区别
    //   仔细思考和观察,上面的代码在保存时发生了什么
    
    <? for i = 1, 10 do?>
        set a = 0
    <? end ?>
    // 循环语句,这次和Jass的循环不一样了,但相信还是很简单的
    //   仔细思考和观察,上面的代码在保存时发生了什么  
    
    <? for i = 1, 10 do?>
        set a = <?= i ?>
    <? end ?>
    // 这样混合使用,可能会更实用些
endfunction
回复

使用道具 举报

Archiver|手机版|小黑屋|哇噢星球  

GMT+8, 2019-6-25 05:48 , Processed in 0.042586 second(s), 13 queries , File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表