荔园在线

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

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


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

发信人: jtiger (jim), 信区: Java
标  题: 在JAVA applet中的动画(四)
日  期: Tue Mar 12 19:20:06 1996


        使用图象:
                现在,我们将重写paintFrame()来使图象动起来。这也就带来一些
        问题,图象往往相当大,被一点点调入,将图象全部画出将花费很多时间,尤其
        是通过一个较慢的连接,这也就是为什么drawImage带四个参数的原因,其中
        第四个参数为一个ImageObserver对象。通过调用getImage()得到图象。

        在屏幕上移动一幅图象:
                world.gif作为背景,car.gif作为移动物体,且被绘制了两次,造成
        一个两辆车比赛的场景。

        Image world;
        Image car;

        public void init() {
                String str = getParameter("fps");
                int fps = (str != null) ? Integer.parseInt(str) : 10;
                delay = (fps > 0) ? (1000 / fps) : 100;

                world = getImage(getCodeBase(), "world.gif");
                car = getImage(getCodeBase(), "car.gif");
        }

        public void paint(Graphics g) {
                update(g);
        }

        public void paintFrame(Graphics g) {
                Dimension d = size();
                int w = world.getWidth(this);
                int h = world.getHeight(this);

                if ((w > 0) && (h > 0)) {
                        g.drawImage(world, (d.width - w)/2, (d.height - h)/2,
this);
                }

                w = car.getWIdth(this);
                h = car.getHeight(this);

                if ((w > 0) && (h > 0)) {
                        w += d.width;
                        g.drawImage(car, d.width - ((frame * 5) % w),
(d.height - h)/3, this);
                        g.drawImage(car, d.width - ((frame * 7) % w),
(d.height - h)/2, this);
                }
        }


        显示一系列图象:
                通过每一帧显示一幅图象来创建动画。我们仍用双缓冲的方法减小
        闪烁。原因是我们显示的每一幅图象有一部分是透明的,因此需要在显示下
        一幅前擦除当前的,如果不使用双缓冲的技术将导致闪烁。

        Image frames[];
        public void init() {
                String str = getParameter("fps");
                int fps = (str != null) ? Integer.parseInt(str) : 10;
                delay = (fps > 0) ? (1000 / fps) : 100;

                frames = new Image[10];
                for (int i = 0; i < 10; i++) {
                        frames[i] = getImage(getCodeBase(), "duke/T" + i +
".gif");
                }
        }

        public void paint(Graphics g) {
                update(g);
        }

        public void paintFrame(Graphics g) {
                g.drawImage(frames[frame % 10], 0, 0, null);
        }



--编译自<JAVA World>
--
Nothing is right,
        nothing is wrong.


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

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


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

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