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 を使ったときと同じように書ける
}
}
}
戻る