|
Not
sure if you want a behavior capturing keystrokes, that's something you pretty
much want instant and 100% available. That's my two cents--if somebody has
a better method, lets hear it (always looking for the *right* way to do
things)
I
attached a KeyListener to the 3D canvas, subclassed to mainKeyListener, that
picks up "keyTyped", "keyPressed", and "keyReleased" events. I directly update
our own avatar movement vectors, and hand off other things (emotes) to a queue
that's hanlded in a behavior.
In the
canvas constructor...
canvas.addKeyListener(new
mainKeyListener());
And
later in the canvas class....
class
mainKeyListener implements KeyListener {
public void keyTyped(java.awt.event.KeyEvent
keyEvent){
if (keyEvent.getKeyChar()=='f' || keyEvent.getKeyChar()=='F'){ ourPlayer.setLightEnable(!ourPlayer.getLightEnable()); addMessage("Settings: Player Torch: " + ourPlayer.getLightEnable()); } if (keyEvent.getKeyChar()=='o' || keyEvent.getKeyChar()=='O'){ showGameStats(); } }
//System.out.println(keyEvent.getKeyChar());
} public void
keyPressed(java.awt.event.KeyEvent keyEvent){
if (keyEvent.getKeyChar()=='a' || keyEvent.getKeyChar()=='A'){ controlCamOut=true; }else if
(keyEvent.getKeyChar()=='z' ||
keyEvent.getKeyChar()=='Z'){
controlCamIn=true; }else if
(keyEvent.getKeyChar()=='s' ||
keyEvent.getKeyChar()=='S'){
controlCamUp=true; }else if
(keyEvent.getKeyChar()=='x' ||
keyEvent.getKeyChar()=='X'){
controlCamDown=true; }else if
(keyEvent.getKeyChar()=='r' ||
keyEvent.getKeyChar()=='R'){
controlForward=true; }
} //return; } public void keyReleased(java.awt.event.KeyEvent keyEvent) { if (keyEvent.getKeyChar()=='a' || keyEvent.getKeyChar()=='A'){ controlCamOut=false; }else if
(keyEvent.getKeyChar()=='z' ||
keyEvent.getKeyChar()=='Z'){
controlCamIn=false; }else if
(keyEvent.getKeyChar()=='s' ||
keyEvent.getKeyChar()=='S'){
controlCamUp=false; }else if
(keyEvent.getKeyChar()=='x' ||
keyEvent.getKeyChar()=='X'){
controlCamDown=false; } } }
|
- [JAVA3D] user interactive 3D avatar animation bh ahn
- Smith, Daniel
