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

[Java3Djp:01482] Re: 衝突判定のトラブル



 ┼─────────── 【kenko&kirei】 ───────────┼
 
        キラキラ光る、『もっと健康に、もっとキレイになる。』
      オープニング記念 ◆アンケート回答者様へ素敵なプレゼント◆
 ┼────────  http://www.kenko-kirei.com/ ────────┼
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


寺島です.
迅速な対応をいただいたのにもかかわらず,質問した
本人からの返答が遅れた失礼をお詫びします.
登録したメールサーバが使えなかったもので・・.

> processStimulus() の最後で wakeupOn() を実行してもだめですか?
> できれば、お書きになった Behavior が読みたいです。

場合によってはうまくいくこともあるのです.

public class colBH extends Behavior{
 private Primitive p;

 private boolean colSW = false;
 private WakeupOnCollisionEntry wIn;
 private WakeupOnCollisionExit wOut;
 private WakeupOnCollisionMovement wMove;

 public colBH(Primitive pr) {
  p = pr;
 }

 public void initialize(){
   wIn = new WakeupOnCollisionEntry(p);
   wOut = new WakeupOnCollisionExit(p);
   wMove = new WakeupOnCollisionMovement(p);
  this.wakeupOn(wIn);
 }

 public void processStimulus(Enumeration criteria){
  colSW = !colSW;

  if (colSW) {
   System.out.println("Collision-in");
   this.wakeupOn(wOut);
  }
  else {
   System.out.println("Collision-out");
   this.wakeupOn(wIn);
  }
 }
}

上のコードでは,Primitiveをつかっていますが,Shape3Dを引数に
とっても同様の結果が出ます.

また,マウスPickingを使って両方の物体を動かせるようにすると,
お互いの干渉ではなく,シーンの中央で出入りしているようなのです.
SchedulingBoundsというのはdetectorの形ではなく,処理の及ぶ
範囲なんですよね?

public void processStimulus(Enumeration criteria){
 WakeupOnCollisionMovement wOnM =
(WakeupOnCollisionMovement)criteria.nextElement();

 SceneGraphPath npath = wOnM.getTriggeringPath();
 Node node = npath.getObject();
 System.out.println(node.getUserData());

 this.wakeupOn(new WakeupOnCollisionMovement(
      p,WakeupOnCollisionMovement.USE_BOUNDS));
}

このようにして衝突対象を確認しようとしたのですが,nullで返って
来てしまい,正しく衝突していないのか,目的のPathがこれでは求め
られていないのか・・と悩んでいます.

> 衝突判定を少しやってみた感想ですが、
> 衝突検知よりも移動ルーチンの方が重要かもしれないと思いました。

移動ルーチンとは・・?
マウスイベントを捕まえてsetTranslation・・などいうことを
自前で作られている方が多いということですか?

p.s.「はじめてのJava 3D」は出版されましたか?