Switchノードの使い方
Switchノードは、その下にぶら下がっているノードのうち、どのノードを有効にするか(表示するか)
を設定することができるノードです。Switchノードの下に、あらかじめShape3Dをぶらさげておき、
それを順番に表示させることによって、Shape3Dのアニメーションが実現できます。
ノードを動的にシーングラフを加えるのに比べて、より高速な動作で行えます。
(たぶん。実は本当に速くなるかは調べてません)
たとえば、The River Meguroの中にある、Numberクラスをみてみましょう。
このクラスは、数字を一つ表示するためのクラスで、スコア表示に使っています。
public class Number {
public TrnsObj to;
private Switch swt;
public Number() {
swt = new Switch();
// 動的にスイッチすることを許可
swt.setCapability(Switch.ALLOW_SWITCH_WRITE);
to = new TrnsObj(swt);
// 数字のShape3Dを10個ぶらさげる
for ( int i=0 ; i<10 ; i++ ) {
swt.addChild(new Text2D(
new Integer(i).toString(), new Color3f(0.1f, 1, 0.1f),
"Dialog", 20, Font.BOLD));
}
}
public void setNumber(int n) {
// ぶらさがっているどのノードを有効にするか
swt.setWhichChild(n);
}
}
コンストラクタで、Switchノードを生成し、その下にText2Dクラスを使って、数字のテクスチャが
はられたShape3DをaddChildメソッドを用いてぶらさげています。
ぶらさげる順番に気をつけてください。この順番を使って、ぶらさがっているノードのうち
どのノードを有効にするかを指定します。この例ですと、メソッドsetNumberでその指定を
行っています。SwitchノードのsetWhichChildメソッドで、有効にするノードを設定できます。
setNumberの引数で、0を指定すると、一番最初にぶらさげたノード、つまり数字の0がはられている
Shape3Dが有効になり、表示されます。1〜9を指定した場合も同様です。
もどる