[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:01985] PickObject クラスに代わる PickCanvas クラスについて



■■■■■■ 喜びの声が続々!あなたの愛車をパワーアップ!■■■■■■■
  ヒ┃ ッ┃ ト┃ 商┃ 品┃ エ┃ コ┃ マ┃ ッ┃ ハ┃ 
  ━┛ ━┛ ━┛ ━┛ ━┛ ━┛ ━┛ ━┛ ━┛ ━┛ 
  ★加速性アップ!★燃費向上!★排気ガス削減 『コムウエル』  
■■■■■■ http://www.rakuten.co.jp/comwell/447837/448576/ ■■■■■
------------------------------------------------------------------------


こんにちは。お久しぶりです。

えんどうさんのサンプルプログラム
(http://www.javaopen.org/j3dbook/text/program6.html)の;
項目「イベントリスナーを使う方法」に掲載してある
PickSelectionFeedback.javaの53行目〜に以下のような
構文があります。
---------------------------------
private Node pickNode(int mx, int my) {
        PickObject  pickObject = new PickObject(canvas, scene);
        SceneGraphPath sgPath = pickObject.pickClosest(mx, my,
PickObject.USE_GEOMETRY);

        if (sgPath == null) return null;

        Node node = pickObject.pickNode(sgPath, PickObject.PRIMITIVE, 1);
        return node;
}
---------------------------------
ここで、com.sun.j3d.utils.behaviors.picking.PickObject
クラスは、現在のバージョン(1.2.1)では推奨されてない
ので、それに代わるクラスとしてPickCanvasを推奨すると
APIリファレンスに書いてあったので、それを使って以下の
ように書き換えてみました。
------------------------------
private Node pickNode(int mx, int my) {
        PickCanvas  pickCanvas = new PickCanvas(canvas, scene);
        SceneGraphPath sgPath =
pickCanvas.pickClosest().getSceneGraphPath();

        if (sgPath == null) return null;

        Node node = pickCanvas.pickAny().getObject();
        return node;
}
----------------------------------
ここで上の構文と比較してみると、
・pickClosestメソッドの引数が、無しのものしかありません。
・pickNodeメソッドがありません。

とりあえず、これで実行すると、コンパイルは通りますが、
マウスでピックした時に、SceneGraphPathを取得する部分で
実行時エラーが発生します。

pickCanvasクラスを使って、えんどうさんのサンプルプログラム
と同様の事がしたいのですが、どうすれば良いでしょうか?
ご教示下さい。

(参照:エラーメッセージ)
Exception occurred during event dispatching:
java.lang.NullPointerException
 at PickSelectionFeedback.pickNode(PickSelectionFeedback.java:47)
 at PickSelectionFeedback.access$0(PickSelectionFeedback.java:12)
 at PickSelectionFeedback$1.mouseClicked(PickSelectionFeedback.java:26)
 at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:210)
 at java.awt.Component.processMouseEvent(Component.java:3718)
 at java.awt.Component.processEvent(Component.java:3544)
 at java.awt.Component.dispatchEventImpl(Component.java:2593)
 at java.awt.Component.dispatchEvent(Component.java:2497)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:339)
 at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.ja
va:131)
 at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java
:98)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:85)




------------------------------------------------------------------------
          『被験者求む! 報奨金100万円。』
     http://www.infoseek.co.jp/Special?pg=es_if.html&svx=971122