Java 版 (精华区)

发 信 人: aiwa (爱华), 信 区: java
标  题: 在JAVA applet中的动画(三)
发 信 站: 紫 丁 香
日  期: Sat May 31 03:45:13 1997
出  处: robsn01.hit.edu

        
        双缓冲技术:
                另一种减小帧之间的闪烁的方法是使用双缓冲,它在许多动画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>

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