关于屏幕切换的问题

nyf1220 2008-03-27 11:16:04
我是新手,模仿别人的代码,做了个测试。
新建了一个MIDlet 子类,算是主类把。
然后开始游戏,
Display.getDisplay(this).setCurrent(gameclass);
然后我在这个gameclass里,开始游戏,,游戏有关卡,我想过一关卡,就出现一个“恭喜过关”的屏幕提示,
我大概写了如下

gameclass里,有个success()方法,过关就调用他,然后过几秒就自动进入游戏下一关。
我写了
if(passgate == null)
passgate = new PassGate(this);
Display.getDisplay(parent).setCurrent(passgate); //parent是主类
passgate.start();
然后我在 passgate 类里
public PassGate(GameScreen g)
{
super(false);
gamescreen = g;
}

public void run()
{
long startTime = System.currentTimeMillis();
long timeTaken = System.currentTimeMillis() - startTime;
while(timeTaken<4000L)
{
timeTaken = System.currentTimeMillis() - startTime;
repaint();
}
this.stop();
Display.getDisplay(parent).setCurrent(gameclass);

gamescreen.repaint();

}
synchronized void start()
{
myThread = new Thread(this);
myThread.start();
}

synchronized void stop()
{
myThread = null;
}
public void paint()
{}

现在,提示画面掉出来了,可是不自动反回去啊。请问问题在那里,谢谢。。
...全文
254 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
千里冰封820 2008-03-30
  • 打赏
  • 举报
回复
我觉得最好是不要去用Timer,可以自己去线程去处理这种事情,并且自己起线程 的话,睡眠的时候是可以动态
更改的,灵活性会更大
nyf1220 2008-03-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lbfhappy 的回复:]
再推荐你一个方法

那就是,一直显示的是当前的屏幕,只不过,你在画的时候,分几种情况来画它,比如在你画游戏内容的方法里面如下定义



[/Quote]
我按照你的方法来了,,下面的方法就是过关后调用的。结果屏幕等待了2秒,也没显示那个字。。就直接到了下一关
private void passpagepaint()
{
Graphics g = getGraphics();
g.setColor(0);
g.fillRect(0, 0, ScreenWidth, ScreenHeight);
g.drawString("congration you ,go on", 5, 85, 0);
try
{
Thread.sleep(2000L);
}
catch(Exception e){System.out.print(e.getMessage());}
Passgate=false;

}
nyf1220 2008-03-30
  • 打赏
  • 举报
回复
楼上的。。具体如何写,我那代码不就是用线程写的么,,可是切换不到原来的屏幕了。。
rypgood 2008-03-30
  • 打赏
  • 举报
回复
多线程去处理啊,弄个canvas的提示的类,搞个线程测时间,当时间到了就换另一个出来显示啊
nyf1220 2008-03-30
  • 打赏
  • 举报
回复
感谢 lbfhappy ,,,你的方法不错。
不过,在主线程里,是不是就不用在开线程了,是不用找个TIMER控制下自动切换,还是??
nyf1220 2008-03-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lbfhappy 的回复:]
Display.getDisplay(parent).setCurrent(gameclass);

gamescreen.repaint();

你让显示出来的是gameclass,可是你却调用gamescreen干什么?
还有,你的代码能详细一些吗?
[/Quote]

呵呵,写错了,应该是
Display.getDisplay(parent).setCurrent(gamescreen);
我不知道该贴什么代码啊。。
gamescreen 就是游戏的主界面,,,用来显示游戏的。
游戏有很多关,我想过一关,就显示下“恭喜您”的界面。。。然后自动返回到游戏界面的下一关。。
work_in_java 2008-03-29
  • 打赏
  • 举报
回复
程序太长了.///
千里冰封820 2008-03-29
  • 打赏
  • 举报
回复
再推荐你一个方法

那就是,一直显示的是当前的屏幕,只不过,你在画的时候,分几种情况来画它,比如在你画游戏内容的方法里面如下定义
private void render(Graphics g){
if(state==GAME_OVER){
drawGameOver(g);
}else if(state==GAME_PASS){
drawGamePass(g);
}else if(state==GAME_STEP1){
drawGameStep1(g);
}else if(state=GAME_STEP2){
drawGameStep2(g);
}....
}


这样的话,你只要在游戏进行到一定程度的时候,把你的state变量改为不同的常量值就可以了,这样你的分工就更明确了,代码的条理也更清楚了。
javameke 2008-03-28
  • 打赏
  • 举报
回复
恩,用TIMER类实现可能会更方便些
prince58 2008-03-28
  • 打赏
  • 举报
回复

你也说了:“gameclass里,有个success()方法,过关就调用他,然后过几秒就自动进入游戏下一关。 ”
那是几秒呢?? 代码帖完整些吧。


注意状态值得转变!!
千里冰封820 2008-03-28
  • 打赏
  • 举报
回复
Display.getDisplay(parent).setCurrent(gameclass);

gamescreen.repaint();

你让显示出来的是gameclass,可是你却调用gamescreen干什么?
还有,你的代码能详细一些吗?
nyf1220 2008-03-28
  • 打赏
  • 举报
回复
木有人了啊。。
nyf1220 2008-03-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lbfhappy 的回复:]
不能,你想要全屏的话
就得自己去起一个线程 ,直接指导它画出来就可以了
[/Quote]
我现在就走的线程,,打开了,可是不知道如何自动关闭。。我那程序不对啊?

public void run()
{
long startTime = System.currentTimeMillis();
long timeTaken = System.currentTimeMillis() - startTime;
while(timeTaken <4000L)
{
timeTaken = System.currentTimeMillis() - startTime;
repaint();
}
this.stop();
Display.getDisplay(parent).setCurrent(gameclass);

gamescreen.repaint();

}
den88 2008-03-28
  • 打赏
  • 举报
回复
API如下:
void setCurrent(Alert alert, Displayable nextDisplayable)
Requests that this Alert be made current, and that nextDisplayable be made current after the Alert is dismissed.
千里冰封820 2008-03-28
  • 打赏
  • 举报
回复
不能,你想要全屏的话
就得自己去起一个线程 ,直接指导它画出来就可以了
nyf1220 2008-03-28
  • 打赏
  • 举报
回复
ALERT,能全屏么?我上次用了下,在手机里,,屏幕直接变小了。。。就是手机的系统菜单出现了。。
千里冰封820 2008-03-28
  • 打赏
  • 举报
回复
你想提示过关后继承可以用Alert来提示
API如下:
void setCurrent(Alert alert, Displayable nextDisplayable)
Requests that this Alert be made current, and that nextDisplayable be made current after the Alert is dismissed.

第一个是你提示过关的Alert,第二个是你的下一关的displayable
nyf1220 2008-03-28
  • 打赏
  • 举报
回复
哎,,帮帮我把。。。
nyf1220 2008-03-28
  • 打赏
  • 举报
回复
1楼的
我说的SUCCESS方法里,就调用了这个啊
public void success()
{
if(passgate == null)
passgate = new PassGate(this);
Display.getDisplay(parent).setCurrent(passgate); //parent是主类
passgate.start();
}

13,100

社区成员

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

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