# KeyNavigatorBehavior Attribute verändern



## KaiserCanvas (12. Mai 2007)

Hallo Leute,
Ich habe ein Beispielprogramm indem ich einen KeyNavigatorBehavior zum Bewegen durch das Universum eingebunden habe. Ich will aber nicht die Pfeiltasten zum Bewegen benützen sondern "W" "A" "S" "D".
Außerdem bewegt man sich viel zu schnell.
Wie kann ich am KeyNavigatorBehavior das verändern?
oder habt ihr bessere vorschläge?
mit dem normalen Key-Behavior hab ichs schon versucht aber das ruckelt mir viel zu sehr das sind ja keine flüssigen Bewegungen mehr.
Danke schonmal
MFG
Flo


----------



## merlin2 (12. Mai 2007)

Am besten ist es immer, sich eigene Behaviors zu schreiben. Dann kannst du alles ändern, was du ändern möchtest.


----------



## Guest (12. Mai 2007)

hab ich auch gemacht aber der hat nicht funktioniert: d.h es Stockte saumäßig. betätigte man die Pfeiltasten so ruckelte es zuerst einmal und dann gings so halbflüssig weiter (wie beim schreiben von irgend nem Buchstabe im Editor). Kann mir jemand sagen woran da liegt? oder ist das algemein so? Ich hatte als Aufwachbedingung "KEY_PRESSED". Und dann einfach die gedrückte Taste abgefragt und im Universum eins nach vorne bewegt oder die anderen richtungen halt.
hat jemand den Code von Sun vielleicht von dem KeyNavigatorBehavior. der wär echt net.
Dabke schomal für eure antworten


----------



## Guest (12. Mai 2007)

Hier mal mein alter Code.
Kann mir einer sagen was da falsch ist bzw. warum es ruckelt wie sau?
(hier noch mit Pfeiltasten hoch runter aber sollte nur vorläufig sein)



```
import java.awt.*;
import java.awt.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;

import java.util.*;

public class KeyBehavior extends Behavior
   {
   private TransformGroup transformGroup;
   private Transform3D trans = new Transform3D(),tempTrans=new Transform3D();
   private WakeupCriterion criterion;
   //private TransformGroup kegel ;
   //private Transform3D transKegel = new Transform3D(), tempTransKegel=new Transform3D() ;

   public KeyBehavior(TransformGroup tg)
      {
      transformGroup=tg;
      }

   public void initialize()
      {
      criterion=new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED);
      System.out.println(criterion);
      wakeupOn(criterion);
      }

   public void processStimulus(Enumeration criteria)
      {
      WakeupOnAWTEvent ev; 
      AWTEvent         AWTEv[];
      KeyEvent         KeyEv;

      while (criteria.hasMoreElements())
         {
         ev=(WakeupOnAWTEvent)criteria.nextElement();
         AWTEv=ev.getAWTEvent();

         for (int i=0; i<AWTEv.length; i++)
            {
            KeyEv=(KeyEvent)AWTEv[i];
            System.out.println("Ke Ev: "+AWTEv[i]);
            transformGroup.getTransform(trans);
           // tempTrans.setIdentity();
            //kegel.getTransform(transKegel);
            //tempTransKegel.setIdentity();
            
            if (KeyEv.getKeyCode()==KeyEvent.VK_UP){
            	tempTrans.setTranslation(new Vector3f(0f,0f,-0.1f));
            	//tempTransKegel.setTranslation(new Vector3f(0f,0f,-5f));
            	//UmgebungErstellen.setTransform3D(tempTransKegel);
            	//System.out.println("UP: "+tempTransKegel);
            }
            else if (KeyEv.getKeyCode()==KeyEvent.VK_DOWN){
            	tempTrans.setTranslation(new Vector3f(0f,0f,0.1f));
            	//tempTransKegel.setTranslation(new Vector3f(0f,0f,0.3f));
            	//UmgebungErstellen.setTransform3D(tempTransKegel);
            }
            trans.mul(tempTrans);
            transformGroup.setTransform(trans);
            }
         }
      
      wakeupOn(criterion);
      }

}
```


----------

