Java 版 (精华区)

发信人: IMPACT (任鸟飞), 信区: Java
标  题: 在JAVA applet中的动画(三) 
发信站: 紫 丁 香 (Wed Jul 15 16:12:40 1998), 转信

BBS水木清华站∶精华区
发信人: jtiger (jim), 信区: Java 
标  题: 在JAVA applet中的动画(三) 
日  期: Tue Mar 12 17:03:29 1996 
 
         
        双缓冲技术: 
                另一种减小帧之间的闪烁的方法是使用双缓冲,它在许多动画applet 
        中被使用。 
                主要原理是创建一个后台图象,将一帧画入图象,然后调用drawImage() 
        将整个图象一次画到屏幕上去。好处是大部分绘制是离屏的。将离屏图象一次 
        绘至屏幕上比直接在屏幕上绘制要有效得多。 
                双缓冲可以使动画平滑,但有一个缺点,要分配一张后台图象,如果图象 
        相当大,这将需要很大一块内存。 
                当你使用双缓冲技术时,应重载update()。 
                 
                Dimension offDimension; 
                Image offImage; 
                Graphics offGraphics; 
 
                public void update(Graphics g) { 
                        Dimension d = size(); 
 
                        if ((offGraphics == null) 
                         || (d.width != offDimension.width) 
                         || (d.height != offDimension.height)) { 
                                offDimension = d; 
                                offImage = createImage(d.width, d.height); 
                                offGraphics = offImage.getGraphics(); 
                        } 
 
                        offGraphics.setColor(getBackground()); 
                        offGraphics.fillRect(0, 0, d.width, d.height); 
                        offGraphics.setColor(Color.Black); 
 
                        paintFrame(offGraphics); 
 
                        g.drawImage(offImage, 0, 0, null); 
                } 
 
                public void paint(Graphics g) { 
                        if (offImage != null) { 
                                g.drawImage(offImage, 0, 0, null); 
                        } 
                } 
 
                public void paintFrame(Graphics g) { 
                        Dimension d = size(); 
                        int h = d.height / 2; 
                        for (int x = 0; x < d.width; x++) { 
                                int y1 = (int)((1.0 + Math.sin((x - frame) *  
0.05)) + h); 
                                int y2 = (int)((1.0 + Math.sin((x + frame) *  
0.05)) + h); 
                                g.drawLine(x, y1, x, y2); 
                        } 
                } 
 
 
--编译自<JAVA World> 
-- 
Nothing is right, 
        nothing is wrong. 
 

BBS水木清华站∶精华区

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: robtech.hit.edu.]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.428毫秒