请问游戏进度条怎么做

先生哪位 2009-01-15 12:09:59
请问游戏进度条怎么做啊?
哪位大哥告诉我?小弟不胜感激!
...全文
556 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sasgsc 2009-01-21
  • 打赏
  • 举报
回复
很不想给代码的,为什么不自己写写试试呢?哎....
package action;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;

import socket.MobileSockMainJ2C;

import core.ClientStart;
import core.PropertyCheck;

public class LoadingShell extends Canvas implements Runnable, CommandListener{

//单例模式
public static LoadingShell singleton;

//定义一个下面要显示的屏幕
private Displayable next;

//定义总高和总宽
private int width=this.getWidth();
private int height=this.getHeight();

//绘图用参数
private int rollx=0;
private int left=this.width/26;
private int widthRect=this.width*12/13;;
private int top=this.height*2/3;
private int heightRect=10;

//定义按钮
private final Command exit;
private final Command change;

//定义一个判断值
private boolean check=true;

//构造函数
public LoadingShell()
{
this.exit = new Command("离开", Command.EXIT, 0);
this.addCommand(exit);

this.change= new Command("修改", Command.EXIT, 0);
this.addCommand(this.change);

this.setCommandListener(this);
}


//绘制图象
protected void paint(Graphics g) {
// TODO 自动生成方法存根
System.gc();

g.setColor(255, 255, 255);
g.fillRect(0, 0, width, height);
g.setColor(0, 0, 0);

g.drawString("数据交换中.....",left,top-3,Graphics.BOTTOM|Graphics.LEFT);
g.setColor(0,255,0);
g.fillRect(left,top,rollx,heightRect);
g.setColor(128,128,128);
g.fillRect(rollx+left,top,widthRect-rollx,heightRect);

}

//启动Loading界面
public void showLoading(Displayable nExt)
{
this.setFullScreenMode(true);

this.next=nExt;

//将Loading放入画面
ClientStart.display.setCurrent(this);

new Thread(this).start();
}
//一组loading方法结束


//停止循环
public void checkToFalse()
{
this.check=false;
return;
}

//启动单例
public static synchronized LoadingShell getInstance()
{
if(singleton==null)
{
singleton=new LoadingShell();
}
return singleton;
}

public void commandAction(Command arg0, Displayable arg1) {
// TODO 自动生成方法存根
//按钮
if(arg0==exit)
{
ClientStart.singleton.quit();
return;
}
if(arg0==this.change)
{
this.next=LoginShell.singleton;
this.checkToFalse();
return;
}
}


public void run() {
// TODO 自动生成方法存根



while(check)
{
this.rollx=this.rollx+2;

if(this.rollx>this.widthRect)
{
this.rollx=0;
}

try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO 自动生成 catch 块

}
this.repaint(this.left,this.top,this.widthRect,this.heightRect);
}

//将check重新置回true
this.check=true;

//将下一页放入显示
ClientStart.display.setCurrent(this.next);

return;
}

}
tianyuansky 2009-01-17
  • 打赏
  • 举报
回复
我上面那个写错了
应该是
else step = (n-1)*100/MaxNum;
free1139 2009-01-17
  • 打赏
  • 举报
回复
据我所知类的创建过程是不可见的,只能估算进度,我有两个做进度方法。
一个是利用类的对象没有创建完成之前为空的标志来做:
class A
{
....
}
class B
{
A a=null;
byte loadPercent=0;
public B()
{
new Thread(new Runnble()
{
public void run()
{
while(loadPercent<100)
{
if(loadPercent<99)//我们课本是大概是这么说的:进度条的最后的1%所用的时间可能是整个进度的99%时间,即类的创建进度是不可见的。
{
loadPercent++;
}
if(a!=null)
{
loadPercent=100;
}
try
{
Thread.sleep(300);
}
...
}
}
a=new A();//如果A是用于加载大的资源,它的创建完成是需要时间的.
}
}
第二个,我是个人的想法。
游戏加载的资源可能有多个类,我在每个类后面给loadPercent赋一个估算值,当最后一个类加载完成时进度条即可以完成了。
第二个方法比较繁,但我用的是第二个方法,因为在真机的移植过程中往往因为设备的不同而造成不可运行的情况,此时我可以知道大概在哪个位置加载出错了.

上面的类是现写的,仅用于表达思想.
tianyuansky 2009-01-17
  • 打赏
  • 举报
回复
我只能给你说下思路,代码手边没有

1、确定读取的资源个数,计算出将要读取的个数,将它赋给变量MaxNum
2、开启一个线程,确定你要画的进度条长度(比如100),用一个变量step标示进度条当前的长度并使之++
3、分布加载你的MaxNum个资源,每加载完成一个,放行step继续++,否则将step停止在当前资源个数上,具体用以下代码实现
if(step<n*100/MaxNum)step++;
else step = n*100/MaxNum;
4、每加载成功一个资源让n++,注意n的初始值是1。
5、如果想让进度走的比较流畅,建议支持双线程的可以再开一个线程用来读取资源,原有的线程用来显示进度。
先生哪位 2009-01-16
  • 打赏
  • 举报
回复
没人说下吗?
ghzxh 2009-01-16
  • 打赏
  • 举报
回复
不懂,帮顶
先生哪位 2009-01-16
  • 打赏
  • 举报
回复
自己顶一下
yangshun888 2009-01-16
  • 打赏
  • 举报
回复
不懂 帮顶
prince58 2009-01-15
  • 打赏
  • 举报
回复
在低级界面下吗?

如果是的话,每帖加载一些东西,然后画一点;相关的代码网上多得很。。。。
yanhan0615 2009-01-15
  • 打赏
  • 举报
回复
思路就是一个线程负责逻辑处理,另外一个线程负责进度条绘制,两个线程可以通信,逻辑线程告诉绘制线程,开始绘制,绘制多少进度,绘制完成。。。就这么简单
先生哪位 2009-01-15
  • 打赏
  • 举报
回复
说下 思路嘛 谢谢!
kao331431214 2009-01-15
  • 打赏
  • 举报
回复
额 只会FLASH的进度条 o(>_<)o ~~
先生哪位 2009-01-15
  • 打赏
  • 举报
回复
请问谁有实例呢? 看下 谢谢了!
kf156 2009-01-15
  • 打赏
  • 举报
回复
意思下就好
例如你十张图片要加载,每加载好一张进度就加10%就行了
先生哪位 2009-01-15
  • 打赏
  • 举报
回复
怎么判断 读取资源得 进度啊?
就是开个线程。。加载一些图就++?
haizj0216 2009-01-15
  • 打赏
  • 举报
回复
高级界面可以使用Gauge类,低级界面可以使用线程控制。
mengmengyq 2009-01-15
  • 打赏
  • 举报
回复
g.setColor(iColor);
g.setClip(xPos,yPos,w,height);//这个w是在多线程里面累加的
g.fillRect(xPos,yPos,width ,height)

你就会看到不断loading的效果.
先生哪位 2009-01-15
  • 打赏
  • 举报
回复
能再清楚点吗?最好有实例 谢谢。。。

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧