如有错误, 希望指出.
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=) 小于等于(<= 或 less=) 不等于(!=).
运算符有 加(+) 减 或 负(-) 赋值(=) 开方(^) 乘(*) 除(/) 模除(%) 哈希(hash 或 #).
维基百科脚本命令大全 (运算符的在A列里最前几个)
消息输出
Hint语句: 属于控制台调试输出语句, 一般用于在调试代码中输出特定值调试而采用.
有以下三种使用方式:
维基百科Hint
SQF脚本基本逻辑语句 >>
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
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/10573.html