当前位置: 代码迷 >> Java相关 >> 按键旋转问题??!!
  详细解决方案

按键旋转问题??!!

热度:140   发布时间:2006-10-15 18:09:47.0
按键旋转问题??!!
大家运行一下下面的程序(按键A为左旋,按键D为右旋):
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.AWTEvent;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.awt.event.*;
import java.util.Enumeration;
public class behaviorTest extends Applet
{
public class MyBehavior extends Behavior
{
private TransformGroup targetTG;
private Transform3D rotation=new Transform3D();
private double angle=0.0;
public MyBehavior(TransformGroup targetTG)
{
this.targetTG=targetTG;
}
public void initialize()
{
this.wakeupOn(new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED));
}
public void processStimulus(Enumeration criteria)
{
WakeupCriterion wakeup=null;
AWTEvent[] event=null;
wakeup=(WakeupCriterion)criteria.nextElement();
if(wakeup instanceof WakeupOnAWTEvent)
{
event=((WakeupOnAWTEvent)wakeup).getAWTEvent();
KeyEvent keyevent=(KeyEvent)event[0];
if(keyevent.getKeyCode()==KeyEvent.VK_A)
{
angle-=0.1;
rotation.rotY(angle);
targetTG.setTransform(rotation);
}
if(keyevent.getKeyCode()==KeyEvent.VK_D)
{
angle+=0.1;
rotation.rotY(angle);
targetTG.setTransform(rotation);
}
}
this.wakeupOn(new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED));
}
}
public BranchGroup createSceneGraph()
{
BranchGroup objroot=new BranchGroup();
TransformGroup objRotate=new TransformGroup();
objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objroot.addChild(objRotate);
objRotate.addChild(new ColorCube(.4));
MyBehavior b=new MyBehavior(objRotate);
b.setSchedulingBounds(new BoundingSphere());
objroot.addChild(b);
objroot.compile();
return objroot;
}
public behaviorTest(){
setLayout(new BorderLayout());
Canvas3D c=new Canvas3D(SimpleUniverse.getPreferredConfiguration());
add("Center",c);
BranchGroup scene=createSceneGraph();
SimpleUniverse u=new SimpleUniverse(c);
u.addBranchGraph(scene);
u.getViewingPlatform().setNominalViewingTransform();
}
public static void main(String arg[])
{
new MainFrame(new behaviorTest(),400,300);
}
}
大家一定会发现一个问题,就是按住A或D的时候,物体会先旋转0.1个弧度,然后停一下,之后才能持续旋转,问题出来了,
大家有没有什么办法让我们按住A或D的时候,物体不用停一下就直接旋转??!!
这个程序是Java3D的,要安装java3d-1_4_0_01-windows-i586.exe
搜索更多相关的解决方案: import  awt  java  Applet  applet  

----------------解决方案--------------------------------------------------------

我的想法是用一个boolean 的变量作为旋转的条件
而按a或d就把boolean 的变量置true或false
这样就能一直旋转


----------------解决方案--------------------------------------------------------
还是不行啊,程序依然是停一下然后在旋转;
还有就是按其他键的时候,它会自动把boolean的变量附成false,那样交互性就减少了;
我就是想让按左键左旋,右键右旋,其他键不起作用,而且不用暂停

----------------解决方案--------------------------------------------------------
还有就是按其他键的时候,它会自动把boolean的变量附成false,那样交互性就减少了;
????????????????????????????????????
不可思议
----------------解决方案--------------------------------------------------------
版主,反恐总该玩过吧,我不希望当我按CapsLock键或其他的时候(除了w,a,s,d),你依然是往前走吧1
----------------解决方案--------------------------------------------------------
不好意思,是Tourists,或者是Conter Tourists
----------------解决方案--------------------------------------------------------

可以监听它抬起的事件
然后改boolean
试一下


----------------解决方案--------------------------------------------------------
  相关解决方案