⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplebehavior.java

📁 一个简单的java3例子
💻 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();
                // 创建根分支节点
        // 添加一个可旋转的节点
        
///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!改动了以下三行!
             
        Transform3D t = new Transform3D();
        t.setTranslation(new Vector3f(0.0f,0.10f,0.0f));
        TransformGroup objRotate = new TransformGroup(t);
        
        TransformGroup objRotate1 = new TransformGroup();  
        objRotate1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        objRoot.addChild(objRotate);
        objRotate.addChild(objRotate1);
        objRotate1.addChild(new ColorCube(0.4));
                // 向该节点添加六面体
        // 向场景中添加新的行为对象
        MyBehavior myRotationBehavior = new MyBehavior(objRotate1);
                // 设定该行为控制的对象为可旋转的节点
        myRotationBehavior.setSchedulingBounds(new BoundingSphere());
                // 设定作用范围    

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