标题:按键旋转问题??!!
只看楼主
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
 问题点数:0 回复次数:6 
按键旋转问题??!!
大家运行一下下面的程序(按键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 
2006-10-15 18:09
无理取闹
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:53
帖 子:4264
专家分:0
注 册:2006-7-26
得分:0 

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


win32汇编
病毒 加密
目前兴趣所在
2006-10-15 20:52
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
得分:0 
还是不行啊,程序依然是停一下然后在旋转;
还有就是按其他键的时候,它会自动把boolean的变量附成false,那样交互性就减少了;
我就是想让按左键左旋,右键右旋,其他键不起作用,而且不用暂停

J3D的摸瞎人
2006-10-16 09:09
无理取闹
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:53
帖 子:4264
专家分:0
注 册:2006-7-26
得分:0 
还有就是按其他键的时候,它会自动把boolean的变量附成false,那样交互性就减少了;
????????????????????????????????????
不可思议

win32汇编
病毒 加密
目前兴趣所在
2006-10-16 12:21
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
得分:0 
版主,反恐总该玩过吧,我不希望当我按CapsLock键或其他的时候(除了w,a,s,d),你依然是往前走吧1

J3D的摸瞎人
2006-10-16 15:15
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
得分:0 
不好意思,是Tourists,或者是Conter Tourists

J3D的摸瞎人
2006-10-16 15:17
无理取闹
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:53
帖 子:4264
专家分:0
注 册:2006-7-26
得分:0 

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


win32汇编
病毒 加密
目前兴趣所在
2006-10-16 15:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-96528-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014501 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved