荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: huanghm (东方不败), 信区: Java
标  题: 在JAVA applet中的动画(三) afei (转寄)
发信站: 深大荔园晨风站 (Wed Jan 21 10:11:35 1998), 转信

发信人: 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>
--
         清  秀  绝  俗 ,容  色  照  人 ,身  形  婀  娜 ,
         被裹在一袭宽大缁衣之中  ,  仍掩不住窈窕娉婷姿态 。
                             (  @ @  )
          +----------------oOOo-(_)-oOOo------------------+
          |         天涯何处没芳草......呜呼哀哉  ?       |
          +-----------------------------------------------+

※ 来源:.深大荔园晨风站 bbs.szu.edu.cn.[FROM: 202.192.140.254]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店