?? 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 + -