ABA Games

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