krkr2 中文文档 下载 App

TJS2 变量与数据类型

TJS2 是什么

TJS2(T Visual Presenter Script 2)是吉里吉里2 的底层脚本语言。整个 KAG 引擎就是用 TJS2 写的。你可以把 TJS2 理解成一个介于 Java 和 JavaScript 之间的面向对象语言:

写在哪里

方式一: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;

数据类型

基本类型

类型示例说明
int42、-1、0x1F32 位整数
double3.14、1.0e-1064 位浮点数
string"hello"、'world'字符串(双引号或单引号都行)
booleantrue、false布尔值
nullnull空值

复杂类型

// 数组
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"