"Frank C.P. Hsu" wrote:
>
> Hi,
>
> I have use "RotPosPathInterpolator" to create an animation.
> My problem is how to start or stop the animation by press a key?
>
"RotPosPathInterpolator" is a behavior, subclass it and just create the
appropriate
wakeup criterion, it should be something similar to the following code snippet.
Hope it helps
Joerg
--
http://w5.cs.uni-sb.de/~baus
Email : [EMAIL PROTECTED]
Phone : +49-681-302-2016
Fax : +49-681-302-4136
Here we go:
import javax.media.j3d.Behavior;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.WakeupOnAWTEvent;
import java.awt.AWTEvent;
import java.awt.event.*;
import javax.vecmath.Vector3f;
public class MyKeyNavigatorBehavior extends Behavior {
private Transform3D tr, tgr;
private TransformGroup tg;
private WakeupOnAWTEvent wup;
private Vector3f vec;
private float step;
private double angle;
public MyKeyNavigatorBehavior(TransformGroup targetTG, float moveStep,
double rotStep ){
super();
this.tgr = new Transform3D();
this.tg = targetTG;
this.wup = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED);
this.step = moveStep;
this.angle = rotStep;
}
public void initialize(){
System.out.println("Key Behavior init");
wakeupOn(wup);
tg.getTransform(tgr);
System.out.println(tgr.toString());
}
public void processStimulus(java.util.Enumeration criteria){
KeyEvent event = (KeyEvent) (wup.getAWTEvent())[0];
int keyCode = event.getKeyCode();
if (keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_DOWN ||
keyCode == KeyEvent.VK_LEFT || keyCode ==
KeyEvent.VK_RIGHT)
{
switch (keyCode) {
case KeyEvent.VK_UP:
tr = new Transform3D();
vec = new Vector3f(0.0f,0.0f,-step);
tr.setTranslation(vec);
tg.getTransform(tgr);
tgr.mul(tr);
tg.setTransform(tgr);
wakeupOn(wup);
return;
case KeyEvent.VK_DOWN:
tr = new Transform3D();
vec = new Vector3f(0.0f,0.0f,step);
tr.setTranslation(vec);
tg.getTransform(tgr);
tgr.mul(tr);
tg.setTransform(tgr);
wakeupOn(wup);
return;
case KeyEvent.VK_LEFT:
tr = new Transform3D();
tr.rotY(Math.toRadians(angle));
tg.getTransform(tgr);
tgr.mul(tr);
tg.setTransform(tgr);
wakeupOn(wup);
return;
case KeyEvent.VK_RIGHT:
tr = new Transform3D();
tr.rotY(-Math.toRadians(angle));
tg.getTransform(tgr);
tgr.mul(tr);
tg.setTransform(tgr);
wakeupOn(wup);
return;
}
} else {wakeupOn(wup);}
}
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".