TJS2 变量与数据类型
TJS2 是什么
TJS2(T Visual Presenter Script 2)是吉里吉里2 的底层脚本语言。整个 KAG 引擎就是用 TJS2 写的。你可以把 TJS2 理解成一个介于 Java 和 JavaScript 之间的面向对象语言:
- 语法风格接近 Java(类型声明、类、继承、接口)
- 动态特性接近 JavaScript(对象字典、动态属性)
- 可以直接调用引擎原生类(Layer、Image、Wave 等)
- 在 scenario 里可以用
[tjs]...[/tjs]嵌入 TJS2 代码块
写在哪里
方式一:scenario 里嵌入
[tjs]
var hero = { name: "阿良良木", hp: 100 };
Layer.current.message = hero.name + " HP: " + hero.hp;
方式二:独立 .tjs 文件
// script/GameManager.tjs
class GameManager {
var score = 0;
function addScore(points) {
this.score += points;
}
}
然后在 startup.tjs 或 scenario 里加载:
[tjs]
Script.load("script/GameManager.tjs");
var gm = new GameManager();
gm.addScore(100);
变量声明
// 全局变量(KAG 也能访问)
global myGlobal = 100;
// 局部变量(只有当前作用域能访问)
var local = "hello";
// 常量
const PI = 3.14159;
数据类型
基本类型
| 类型 | 示例 | 说明 |
|---|---|---|
int | 42、-1、0x1F | 32 位整数 |
double | 3.14、1.0e-10 | 64 位浮点数 |
string | "hello"、'world' | 字符串(双引号或单引号都行) |
boolean | true、false | 布尔值 |
null | null | 空值 |
复杂类型
// 数组
var arr = new Array();
arr.push(1);
arr.push(2);
var arr2 = [1, 2, 3]; // 简写
// 字典/对象
var hero = {
name: "阿良良木",
hp: 100,
mp: 50,
items: ["剑", "药水"]
};
hero.hp -= 10; // 属性访问
// 函数作为值
var greet = function(name) {
return "Hello, " + name + "!";
};
greet("World");
运算符
// 算术
+ - * / % ++ --
// 比较
== != === !== < > <= >=
// 逻辑
&& || !
// 赋值
= += -= *= /= %=
// 字符串拼接
var fullName = firstName + " " + lastName;
控制流
if/else
if (score >= 80) {
Layer.current.message = "优秀";
} else if (score >= 60) {
Layer.current.message = "及格";
} else {
Layer.current.message = "不及格";
}
switch
switch (dayOfWeek) {
case 0: message = "周日"; break;
case 1: message = "周一"; break;
default: message = "其他"; break;
}
循环
// for
for (var i = 0; i < 10; i++) {
// ...
}
// while
while (hp > 0) {
// ...
}
// do-while
do {
// ...
} while (condition);
// for-in(遍历对象属性)
for (var key in hero) {
Layer.current.message = key + ": " + hero[key];
}
函数定义
// 基本函数
function add(a, b) {
return a + b;
}
// 带默认参数
function greet(name = "无名氏") {
return "你好," + name;
}
// 可变参数
function sum(...nums) {
var total = 0;
for (var n in nums) total += n;
return total;
}
字符串操作
var s = "Hello World";
s.length; // 11
s.charAt(0); // "H"
s.indexOf("World"); // 6
s.replace("World", "Kirikiri"); // "Hello Kirikiri"
s.toUpperCase(); // "HELLO WORLD"
// 字符串插值(有些版本支持模板字符串)
var name = "阿良良木";
Layer.current.message = sprintf("你好,%s!HP: %d", name, hp);
与 KAG 变量互通
// KAG 设置的全局变量,TJS2 里直接用
[set variable="playerName" value="阿良良木"]
[tjs]
Layer.current.message = playerName; // 直接访问
// TJS2 设置的全局变量,KAG 里也能用
[tjs]
global coin = 100;
[eval exp="coin"] ← KAG 能读到
类型转换
// 字符串 → 数字
parseInt("42"); // 42
parseInt("100", 16); // 256(16进制)
parseFloat("3.14"); // 3.14
// 数字 → 字符串
String(42); // "42"
(42).toString(); // "42"
// 判断类型
typeof 42; // "int"
typeof "hello"; // "string"
typeof null; // "null"