📄 simplebehavior.java
字号:
//SimpleBehavior.java
//该程序用来说明如何写自己的Behavior
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 SimpleBehavior extends Applet {
public class MyBehavior extends Behavior{
// 控制目标对象以及状态信息
private TransformGroup targetTG;
private Transform3D rotation = new Transform3D();
private double angle = 0.0;
// 构造函数
MyBehavior(TransformGroup targetTG){
this.targetTG = targetTG;
//获得控制对象的引用
}
// initialize 方法
public void initialize(){
this.wakeupOn(new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED));
//设置唤醒条件为有键按下
}
// processStimulus方法
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_LEFT){
angle-=0.1;
rotation.rotY(angle);
targetTG.setTransform(rotation);
}
// 判断是否为右键,并做相应右旋处理
if(keyevent.getKeyCode()==KeyEvent.VK_RIGHT){
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(0.4));
// 向该节点添加六面体
// 向场景中添加新的行为对象
MyBehavior myRotationBehavior = new MyBehavior(objRotate);
// 设定该行为控制的对象为可旋转的节点
myRotationBehavior.setSchedulingBounds(new BoundingSphere());
// 设定作用范围
// objRoot.addChild(myRotationBehavior);
objRotate.addChild(myRotationBehavior);
// 将行为对象添加到根结点,即接收激励的来源
objRoot.compile();
// 进行优化
return objRoot;
}
public SimpleBehavior() {
setLayout(new BorderLayout());
Canvas3D canvas3D = new Canvas3D(null);
add("Center", canvas3D);
BranchGroup scene = createSceneGraph();
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
// 创建虚拟空间
simpleU.getViewingPlatform().setNominalViewingTransform();
//将观察者向后移动
simpleU.addBranchGraph(scene);
}
public static void main(String[] args) {
Frame frame = new MainFrame(new SimpleBehavior(), 256, 256);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -