📄 loading
字号:
关于进度条
最近在看《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 + -