学好SQF, 快活Arma3

您所在的位置:网站首页 unity脚本语言菜鸟教程 学好SQF, 快活Arma3

学好SQF, 快活Arma3

2023-12-10 09:21| 来源: 网络整理| 查看: 265

Arma3 SQF脚本学习轨迹 (6月后更新)     SQF, 是波西米亚公司为Arma3设计的脚本语言. 网上关于SQF的教程零散,且很多都不全,大部分学习需要查询波西米亚的维基百科,学习过程曲折,这里分享我在学习SQF过程中的总结,也可以说是关于SQF的一个实时更新的教程.

    如有错误, 希望指出.

在这里插入图片描述

SQF编辑器选择 >>

在这里插入图片描述

   这里用主流的VSCode编辑器演示,安装时采用上图的插件,主要是添加高亮和补全提示, 也可以采用NotePad++, SublimeText等    当然如果想要作的话 记事本 和 Vim 也可以, 没有高亮而已 (Just A Joke)    测试脚本需要在游戏环境下运行, 可以在游戏编辑器内部的调试控制台调试脚本(只能少量脚本, 因为游戏内的编辑不适用’回车’, 也就是说脚本代码不是呈块状, 一行到底)

SQF 编写和运行准备>>

    如何运行: 打开Arma3 的 Editor, 新建工程后保存, 单人会在 “文档 / Arma3 / missions /” 文件夹下. 多人在 “文档 / Arma3 / mpmissions /” 文件夹下. 打开工程文件夹, 新建脚本文件 “xxx.sqf” 并编辑. 写完后保存. 在游戏内的触发器里或者调试控制台内输入 call { execVM “xxx.sqf”; }; 如果不在统计文件夹下, 在文件名前加上路径即可.

SQF脚本入门知识点>>   局部变量

   概念:   用于存储数据, 作用参考数学变量. 局部则是表示该变量仅仅用于该文件内.    变量的数据类型有以下几种    Number(数字) String(字符串) Array(数组) Group(组) Boolean(布尔值) Object(对象) Side(阵营类型) Config(配置) Location(地点) ScriptHandle(脚本句柄) HashMap(哈希表) HashMapKey(哈希表关键字) 等.    局部变量标志 _+变量名 比如 _name;    局部变量值为 nil 时, 表示空, 可理解为删除变量.    private 修饰的变量表示该变量不能被外文件修改.      维基百科数据类型

  特殊变量

   概念:   特殊变量是游戏引擎用于特定环境下特别设定的变量.    常见的有一下变量:    其中, _x 变量的服务范围属于 apply, count, configClasses, configProperties, findIf, forEach, select 等语句中.    其中, _this 变量用于使脚本调用(call、execVM、execVM、spawn)的参数对脚本可见和可访问,也可用于传递参数, 类似于C++的 this 指针的作用.    如果没有理解这些变量的作用, 不必过于深究, 下面的学习中可以慢慢领悟.        维基百科特殊变量    在这里插入图片描述

  Array 数组

   概念:   元素的集合.    神奇的是在 SQF 中, 数组内的元素的数据类型可以是不同的, 而且数组的定义也不需要声明数组的类型, 因为在 SQF 中, 数组就是数组 (Array) 类型.   数组的赋值是引用关系, 即同一个数组用两个变量名字, 对一个数组变量操作会引起另一个数组变量的变化.    注意! 由于下图中含有 set 操作, 需要和下文的 set 知识点结合看. select x 表示选择数组的第 x 个.    维基百科Array  在这里插入图片描述

  Set 映射

   概念:   哈希映射表的使用    set 映射常常和数组一起使用, 在设计中一般充当了修改数组的作用. 格式为   数组变量名 set[index, value];  对已经存在的数组建立映射关系, 如果下标不存在, 就会帮数组新建, 如果值不相同就会帮数组修改值.    维基百科Set  在这里插入图片描述

  逻辑表达式和运算符

   逻辑表达式概念:   一般当作条件判断句, 由逻辑符和变量名构成.    基本的逻辑关系有 非 (! 或 not)  与(&& 或 and)   或(|| 或 or).    通过添加小括号可以先执行小括号里的语句, 因为小括号的优先级最高.    在这里插入图片描述        运算符概念:   数学运算, 由运算符和变量名构成.    比较符有 大于(> 或 greater)  小于(< 或 less)   大于等于(>= 或 greater=)   小于等于(>   If条件从句

   概念:   如果 ( ) 内的条件成立,就执行 then { } 内的句子; 不成立就不执行或者执行else { } 内的语句    比较鸡肋的是在SQF中并没有明确的else-if, 即多条件判断. 波西米亚的维基百科也未提到. 多条件判断只能在else里嵌if 和部分情况下使用 switch条件语句.   在SQF中 If 从句还可以类似于三目运算判断的存在,即可以有:    _value = if(1 > 0) Then { “hello”; };   维基百科If   在这里插入图片描述

  Switch条件从句

   概念:  将 ( ) 内的值与每个 case 后面的选项配对, 找到自己后, 执行该 case 后 { } 的语句, 如果没有找到, 只能去 default 后面执行.     ( ) 内的值类型可以是所有类型.    如果 ( ) 里的值是字符串, 那么会区分字母的大小写.    维基百科Switch    在这里插入图片描述

  While循环从句

   概念:   当 ( ) 内的条件成立时, 就做 Do { } 内的语句, 直到 ( ) 内的条件不满足, 退出 While 循环往后执行.     ( ) 内的值和 If 从句一样属于逻辑表达式.     While 的 { } 必须有循环变量的增减, 不然会导致循环变成死循环, 下图的 _number = _number + 1 就是.        维基百科While     在这里插入图片描述

  For循环从句

   概念:  [ ] 内有 3 个表达式分别是: 循环变量起始值,  满足的条件,  循环变量的步长.    循环的执行次序是:        step 1.循环变量初始值初始化 (第一个表达式).        step 2.是否满足条件(第二个表达式), 如果满足, 则执行 { } 内的语句, 不满足则退出循环.        step 3. 循环变量加上步长 (第三个表达式).        step 4. 返回 step 2.     For 循环语句还有另一种写法, 偏向 VB 的语言风格:   for “_i” from 9 to 1 step -1 do { hint str _i; };    可以发现循环变量是打上引号的. 这种写法是官方推荐的, 原理是遍历而不是比较, 能够提升效率.    维基百科For    在这里插入图片描述

  ForEach循环从句

   概念:   对数组内的每个元素或者哈希表内的每项挨个遍历执行固定语句.    在 forEach 遍历数组时, 特殊变量 _x 存储数组的元素, 特殊变量 _forEachIndex 存储元素的数组下标.    在forEach 遍历哈希表时, 特殊变量 _x 存储哈希表的关键字 Key, _y 特殊变量用于存储哈希表关键字所对应的值 Value, _forEachIndex 特殊变量存储元素的下标.        forEach 可有返回值, 类似于上文If 条件句的用法, 但是需要 exitWith.        维基百科ForEach    在这里插入图片描述

  WaitUntil等待暂停从句

   概念: 暂停执行脚本, 直到 { } 内的条件被满足才继续执行下面的程序.    只能在允许暂停的环境下使用, 比如execVM spawn 等.    在程序运行时, 会循环调用 { } 内的语句直到条件满足为止.    在 { } 可以有执行句, 即非条件句. 但一定要含有条件句, 条件句放在最后并且结尾不需要 ;        维基百科WaitUntil     在这里插入图片描述

SQF脚本初级知识点>>   ExecVM调用SQF脚本

   作用:  编译并且将脚本添加到调度程序当中    虽然在编写脚本时提倡分文件, 但是大量的使用 ExecVM 会导致资源占用, 一般体现在游戏在调用时卡顿 (毕竟要编译). 所以一些简单的功能可以使用函数封装 (函数是指功能块代码并非数学函数, 下文会提及).        维基百科ExecVM     在这里插入图片描述

  Count计数

   作用:  返回数组元素的数量. 返回匹配的元素数量. 配置条目中的个数. ANSI字符串的字符数.    返回值是 Number 类型. 接收类型可以为 Array HashMap Config String.    条件计数, 返回满足条件的元素个数.        维基百科Count     在这里插入图片描述

  FindIf查找真元素

   作用:  返回数组元素的数量. 返回匹配的元素数量. 配置条目中的个数. ANSI字符串的字符数.    返回值是 Number 类型. 接收类型可以为 Array HashMap Config String.    条件计数, 返回满足条件的元素个数.        维基百科FindIf     在这里插入图片描述

  Apply操作元素

   作用:  对数组或者哈希表的每个元素执行指定的代码操作, 并且将结果收集到一个数组里.    对于数组来有特殊变量 _x 表示元素值. 对于哈希表来说有特殊变量 _x 表示元素的 Key 值和 _y 表示元素的值.        维基百科Apply     在这里插入图片描述

  Random随机数

   作用:  在指定范围内生成随机数字, 设计随机生成的对象, 掉落物等的基础.    有直接通过 Random 直接生成随机数的, 也有通过 Random 随机种子生成随机数.    生成数的类型是Number.        维基百科Random     在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3