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

📄 simplebehavior.java

📁 包括了JAVA3D(全世界都能看到的网络三维动画)的源代码部分! 很多基础但是却很精彩的例子!有什么不明白的也可以和我交流MSN:guorui0728@hotmail.com
💻 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 + -