⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loading

📁 关于j2me里面各种漂亮进度条的制作方法!
💻
字号:
关于进度条


最近在看《J2ME 手机游戏开发技术详解》强锋科技 龚剑,李振鹏 编著
书中关于进度条的方法是这样的:

进度条的实现时基于多线程的思想。一个单独的线程进行进度条的绘制工作,程序的主线程同步进行资源的载入,两个线程同时运行在资源载入结束时,通知进度条线程结束。本程序使用构造对象的方式通知线程,而没有使用内部的线程同步机制,有效地避免了竞争和冲突。

public class LPProgressThread extends Canvas implements Runnable
{


        public boolean loadProgressIsOver = false;
        private volatile Thread progressThred = null;
        private int width, height;
        private long startTime, endTime;
        private static final int FRAME_TIME = 200;//为了方便资源载入的线程获得较多的执行时间,每一帧的执行时间为200毫秒
        private Font font = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE);
        private int gaugeCnt;
        private int progressInterval = 1;
        private static final int PROGRESS_END = 150; //线程的预计执行时间为150帧 
        private MIDlet midlet;



        public LPProgressThread(MIDlet midlet)
        {
                this.midlet = midlet;                //主midlet的引用
                this.width = this.getWidth();        //获取屏幕的宽度
                this.height = this.getHeight();      //获取屏幕的高度
        }

        public void paint()
        {
                //画出用户想要的图形,具体的程序省略
        }
        public void run()
        {
                try
                {
                        Thread currentThred = Thread.currentThread(); //获取当前的线程
                        while (currentThred == progressThread)
                        {
                                startTime = System.currentTimeMillis();
                                repaint(0, 0, width, height);
                                serviceRepaint();
                                gaugeCnt += progressInterval;  //增加进度条的前进间隔
                                if (((LPIGetCanvas)midlet).getCanvas() != null)
                                {
                                        progressInterval += 1;//如果查询构造成功,则进度条的前进间隔加大,结果是速度加快
                                }
                                if (gaugeCnt >= PROGRESS_END)
                                {
                                        if (((LPIGetCanvas)midlet).getCanvas() == null)
                                        {
                                                gaugeCnt -= progressInterval;
                                        }
                                        else
                                        {
                                                loadProgressIsOver = true; //构造成功转化canvas ,切换到程序的主canvas
                                                Display.getDisplay(midlet).setCurrent(((LPIGetCanvas)midlet).getCanvas());
                                                ((LPIGameStart)((LPIGetCanvas)midlet).getCanvas()).start();  //开始游戏主循环
                                                break;
                                        }
                                }
                                endTime = System.currentTimeMillis();
                                if ((endTime - startTime) < FRAME_TIME)
                                {
                                        Thread.sleep(FRAME_TIME - endTime + startTime);
                                }
                        }
                }
                catch (InterruptedException ex)
                {
                        System.out.println(ex);
                }
        }
        public void start()
        {
                progressThread = new Thred(this);
                progressThred.setPriority(Thread.MIN_PRIORITY + 1);
                progressThred.start();
        }

        public void stop()
        {
                progressThread = null;
        }
}
在执行的时候会有在最后的1%用的时间比前面的99%耗的时间还多这和Windows的安装程序有些相似

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -