X3D 通過 Script 節點嵌入腳本程序,支持 ECMAScript/JavaScript 或 Java 語言。ECMAScript 是 Netscape 和 Microsoft 共同制定的標準腳本語言,語法與 JavaScript 基本一致,面向對象,適用於任何腳本環境。本講通過完整實例講解腳本節點的創建、字段定義、事件路由及動畫控制。
場景描述:黃色球體靜止,圓柱體初始位於原點。點擊圓柱體 → 沿 X 軸移動 5 米;再次點擊 → 返回原點。循環往複。




定義三個字段:
isActive (SFBool, inputOnly) — 接收 TouchSensor 事件value_changed (SFVec3f, outputOnly) — 輸出位移向量isTrans (SFBool, inputOutput, 初始 FALSE) — 記錄移動狀態ecmascript:
function set_translation(isActive) {
if (isActive == true) {
if (isTrans == false) {
value_changed[0] = 5; // X軸位移5
} else {
value_changed[0] = 0; // 歸零
}
value_changed[1] = 0;
value_changed[2] = 0;
isTrans = !isTrans; // 翻轉狀態
}
}


ROUTE TouchSensor.isActive TO USESCRIPT.set_translation
ROUTE USESCRIPT.value_changed TO Transform.translation

isActive = TRUE 事件set_translation()isTrans 狀態計算位移,輸出 value_changed,翻轉 isTranstranslation 字段目標:點擊後圓柱體緩慢移動到目標位置。引入 TimeSensor + PositionInterpolator。

路由邏輯:
touchTime → TimeSensor.startTime (啟動計時器)fraction_changed → PositionInterpolator.set_fractionvalue_changed → Transform.translation (插值位移)value_changed (到達終點) → Script 判斷 → TimeSensor.stopTime (停止)Script 節點賦予 X3D 可編程能力,配合傳感器、插值器、ROUTE 機制,可實現豐富的交互邏輯與程序化動畫。掌握字段類型、訪問類型、ECMAScript 語法及路由拓撲,是開發高級 X3D 應用的關鍵。下一講將探討更複雜的腳本交互模式。