I have already managed to do this with the code for the behaviour as
below

    The values for the buttons can be found in the java.awt.event.KeyEvent
class

    public class ViewMovement extends Behavior {


     private TransformGroup yrot;
     private TransformGroup xrot;
     private Transform3D yTransform;
     private Transform3D xTransform;
     private Vector3d vec;
     private Vector3d addition;
     private WakeupCondition conditions;
     private double turnY=0;
     private double turnX=0;

     public ViewMovement(TransformGroup ynode,TransformGroup xnode)
     {
      yrot=ynode;xrot=xnode;
      WakeupCriterion wakeUp[]={
       new WakeupOnElapsedFrames(0),new WakeupOnAWTEvent(Event.KEY_PRESS)};
      conditions=new WakeupOr(wakeUp);

     }

     public void initialize()
     {
      vec=new Vector3d();
      yTransform=new Transform3D();
      xTransform=new Transform3D();
      yrot.getTransform(yTransform);
      yTransform.get(vec);

      wakeupOn(conditions);
     }

     public void processKeyEvent(KeyEvent evt)
     {
      int key;

      key=evt.getKeyCode();

      if(key==KeyEvent.VK_UP)
      {
       turnX=turnX+0.1;
       xTransform.rotX(turnX);
       System.out.println("Up button");
       return;
      }
      else if(key==KeyEvent.VK_DOWN)
      {
       turnX=turnX-0.1;
       xTransform.rotX(turnX);
       System.out.println("Down button");
       return;
      }
      else if(key==KeyEvent.VK_LEFT)
      {
       turnY=turnY-0.1;
       yTransform.rotY(turnY);
       System.out.println("Left button");
       return;
      }
      else if(key==KeyEvent.VK_RIGHT)
      {
       turnY=turnY+0.1;
       yTransform.rotY(turnY);
       System.out.println("Right button");
       return;
      }
        return;
     }

     public Vector3d calculateNewDistance(double distance, double xrotation,
double yrotation)
     {
      double xdistance=0;
      double ydistance=0;
      double zdistance=0;
      double ztempdistance=0;
      Vector3d newDistance;

      // Calaculate two dimensional distances
      ydistance=  Math.sin(xrotation)*distance;

      ztempdistance= Math.cos(xrotation)*distance;

      //Calculate 3 dimensional distances
      xdistance=  Math.sin(yrotation)*ztempdistance;
      zdistance=  Math.cos(yrotation)*ztempdistance;

      newDistance=new Vector3d(xdistance,ydistance,-zdistance);
    //  System.out.println(""+newDistance);
      return newDistance;
     }



     public void processStimulus(Enumeration criteria)
     {
      WakeupCriterion wakeupInstance;


      AWTEvent[] evt=null;
      try{
      while(criteria.hasMoreElements())
      {
       wakeupInstance=(WakeupCriterion)criteria.nextElement();
       if(wakeupInstance instanceof WakeupOnElapsedFrames)
          {
        vec.add(calculateNewDistance(0.1,turnX,turnY));

         }
       if(wakeupInstance instanceof WakeupOnAWTEvent)
       {

        System.out.println("Keyboard press detected");
        evt=((WakeupOnAWTEvent)wakeupInstance).getAWTEvent();
        processKeyEvent((KeyEvent)evt[0]);

       }
      }
      yTransform.set(vec);
      yrot.setTransform(yTransform);
      xrot.setTransform(xTransform);
      wakeupOn(conditions);
      }
      catch(NullPointerException e1){System.out.println("Null Exception");}
        }
    }

ViewMovement.java

Reply via email to