TransformGroup transform=universe.getViewingPlatform().getViewPlatformTransform(); Behavior behavior=new FreeViewBehavior(transform);
BoundingSphere bounds=new BoundingSphere( new Point3d(),Double.POSITIVE_INFINITY); // 範囲を全体にしたい時はこのようにする behavior.setSchedulingBounds(bounds); root.addChild(behavior);
public class FreeViewBehavior extends Behavior
public void initialize() { // 初期化コード wakeupOn(new WakeupOnElapsedFrames(0)); // 今から 0 フレーム後 (今のフレームが終わった後) に動いて欲しい }
public void initialize() { WakeupCriterion[] events=new WakeupCriterion[7]; events[0]=new WakeupOnElapsedFrames(0); events[1]=new WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED); events[2]=new WakeupOnAWTEvent(MouseEvent.MOUSE_RELEASED); events[3]=new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED); events[4]=new WakeupOnAWTEvent(MouseEvent.MOUSE_DRAGGED); events[5]=new WakeupOnAWTEvent(MouseEvent.MOUSE_ENTERED); events[6]=new WakeupOnAWTEvent(MouseEvent.MOUSE_EXITED); WakeupCondition mouseCriterion=new WakeupOr(events); // 上の 7 つの条件のどれか一つでも満たされたら呼んで欲しい wakeupOn(mouseCriterion); }
public void processStimulus(Enumeration criteria) { while (criteria.hasMoreElements()) { WakeupCriterion criterion=(WakeupCriterion)(criteria.nextElement()); if (criterion instanceof WakeupOnElapsedFrames) { // 条件 WakeupOnElapsedFrames で呼ばれた時の処理 } else if (criterion instanceof WakeupOnAWTEvent) { // 条件 WakeupOnAWTEvent で呼ばれた時の処理 } } wakeupOn(mouseCriterion); // もう一度呼ぶ }
// 上の「条件 WakeupOnAWTEvent で呼ばれた時の処理」のところに書く AWTEvent[] events=((WakeupOnAWTEvent)(criterion)).getAWTEvent(); for (int i=0;i < events.length;i++) { if (events[i] instanceof MouseEvent) { MouseEvent event=(MouseEvent)(events[i]); if (event.getID()==MouseEvent.MOUSE_PRESSED) { // マウスが押されたときの処理 // あとは、Listener を使ったときと同じように書ける } } }
戻る