這篇文章被分為兩個部分,描寫我怎樣實現一個Java 3D動畫屏幕效果.在這個部分,我將說明我怎樣利用JMF(Java Media Framework),非凡是在JMF Performance Pack for Windows v.2.1.1e情況下.我的另外兩個工具是J2SE 5.0和Java 3D 1.3.2.我將討論另外的使用Quicktime for Java的動畫屏幕版本.
。程序執行使用Model-View-Controller設計模式.屏幕是一個視頻元素,由JMFMovieScreen類描述.動畫是一個由JMFSnapper類控制的模型部分.一個Java 3D Behavior類,TimeBehavior,控制動畫定時定期更新.所有JMF編碼都存放在JMFSnapper類,可以很方便的測試各種變化.這篇文章的第二部分JMFSnapper由QuickTime for Java版本中的QTSnapper取代.
// globalsprivate BranchGroup sceneBG;private JMFMovieScreen ms; // the movie screenprivate TimeBehavior timer; // to update screenprivate void addMovieScreen(String fnm){ // put the movie in fnm onto a movie screen ms = new JMFMovieScreen( new Point3f(1.5f, 0, -1), 2.0f, fnm); sceneBG.addChild(ms); // set up the timer for animating the movie timer = new TimeBehavior(40, ms); // update movie every 40ms (== 25 frames/sec) timer.setSchedulingBounds(bounds); sceneBG.addChild(timer);}
兩個Java 3D addChild()方法調用JMFMovieScreen和TimeBehavior節點間的連接.setSchedulingBounds()激活TimeBehavior節點.
// globalsprivate Texture2D texture; // used by the quadprivate ImageComponent2D ic; private JMFSnapper snapper; // to take snaps of the movieprivate boolean isStopped = false; // is the movie stopped?public void nextFrame(){ if (isStopped) // movie has been stopped return; BufferedImage im = snapper.getFrame(); // get current frame if (im != null) {