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を指定した場合も同様です。
もどる