怪了!!!WTK2.0模拟器难道不支持keyRepeated?

halleyw 2003-09-23 11:25:17
public void paint(Graphics g){

g.setColor(BACKGROUND);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(FOREGROUND);
g.fillArc(x, y, 20, 20, 0, 360);

if(hasRepeatEvents()) {
g.drawString("Repeat", 0, 0, Graphics.TOP|Graphics.LEFT);
} else {
g.drawString("No repeat ", 0, 0, Graphics.TOP|Graphics.LEFT);
}
}


====================

这是部分程序,
结果打印出来是个"No repeat"
为什么?
模拟器可是wtk2.0的呀!!!不可能不支持repeat呀!!!
...全文
53 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
halleyw 2003-10-08
  • 打赏
  • 举报
回复
明白,呵呵!
james_sc 2003-10-07
  • 打赏
  • 举报
回复
在一个while(true)循环中不停的取得getKeyStates(),就可以获得健的当前状态。具体表现为你按一个健不松,每一个时刻都能取得他的状态来处理和触发repeat事件的效果一样,但对你来说更容易处理。
halleyw 2003-10-02
  • 打赏
  • 举报
回复
james_sc(随遇而安)
能不能给点例子?
看了e文的api说明,我还是不很清楚
james_sc 2003-09-30
  • 打赏
  • 举报
回复
用GameCanvas中的getKeyStates()可以处理的很完美。
不需要模拟repeat,只要不停的取得键的状态即可。
halleyw 2003-09-26
  • 打赏
  • 举报
回复
syngle, 你的能运行吗?
我稍微修改一下可以编译成功。
但是运行不了!!
修改的地方是:

……………………
public void itemStateChanged(Item item)
{
if (item==timeInterval)
{
int value=timeInterval.getValue();
// timeInterval.setLabel("时间间隔:"+(200+100*Value)+"ms");
timeInterval.setLabel("时间间隔:ms");
}
}

class MyCanvas extends Canvas

…………

因为那里报错,错误信息:cannot resolve symbol

symbol : variable Value
所以我删掉了点东西!
云行不行!!!为什么?
syngle 2003-09-25
  • 打赏
  • 举报
回复
记得给分啊,hoho
syngle 2003-09-24
  • 打赏
  • 举报
回复
给个用timer和timertask仿真的程序你看:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;

public class RepeatEventTest extends MIDlet implements CommandListener,ItemStateListener
{
Display display;
MyCanvas myCanvas;
Form form;
ChoiceGroup setRepeat;
Gauge timeInterval;
Command exitCmd,okCmd,backCmd;
Timer repeatTimer;
RepeatTask task;
boolean simRepeat, hasRepeat;

public RepeatEventTest()
{
display=Display.getDisplay(this);
exitCmd=new Command("退出",Command.EXIT,1);
okCmd=new Command("确定",Command.OK,1);
backCmd=new Command("返回",Command.BACK,1);
setRepeat=new ChoiceGroup("模拟repeat事件?",Choice.EXCLUSIVE);
setRepeat.append("否",null);
setRepeat.append("是",null);
timeInterval=new Gauge("时间间隔:200ms",true,10,0);
myCanvas=new MyCanvas(this);
repeatTimer=new Timer();
task=new RepeatTask();
form.append(setRepeat);
form.append(timeInterval);
form.addCommand(exitCmd);
form.addCommand(okCmd);
form.setCommandListener(this);
form.setItemStateListener(this);
}

public void startApp()
{
display.setCurrent(form);
}

public void pauseApp(){}

public void destroyApp(boolean unconditional){}

public void commandAction(Command c, Displayable d)
{
if (c == exitCmd)
{
destroyApp(true);
notifyDestroyed();
}
else if (c == okCmd)
{
if (setRepeat.getSelectedIndex()==0)
simRepeat=false;
else
simRepeat=true;
display.setCurrent(myCanvas);
}
else if (c == backCmd)
{
display.setCurrent(form);
}
}

public void itemStateChanged(Item item)
{
if (item==timeInterval)
{
int value=timeInterval.getValue();
timeInterval.setLabel("时间间隔:"+(200+100*Value)+"ms");
}
}

class MyCanvas extends Canvas
{
int gameAction;
int x,y;

public MyCanvas(RepeatEventTest parent)
{
x=getWidth()/2;
y=getHeight()/2;
addCommand(backCmd);
setCommandListener(parent);
}

public void paint(Graphics g)
{
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0);
g.fillRect(x,y,20,20);
}

public void showNotify()
{
repeatTimer.schedule(task,0);
}

public void hideNotify()
{
repeatTimer.cancel();
}

public void keyPressed(int keyCode)
{
if (simRepeat)
{
hasRepeat=false;
}
}

public void keyRepeated(int keyCode)
{
if (hasRepeatEvents())
{
keyPressed(keyCode);
}
}

void performGameAction()
{
switch(gameAction)
{
case Canvas.UP:
if (y<getHeight()) y-=2; break;
case Canvas.DOWN:
if (y>0) y+=2; break;
case Canvas.LEFT:
if (x>0) x-=2; break;
case Canvas.RIGHT:
if (y<getWidth()) x+=2; break;
case Canvas.FIRE:
if (y<getWidth()) x+=2; break;
}
repaint();
}
}

class RepeatTask extends TimerTask
{
public void run()
{
while(true)
{
while(hasRepeat)
{
int interval=200+100*timeInterval.getValue();
try
{
myCanvas.performGameAction();
Thread.sleep(interval);
}
catch(Exception ex){}
}
}
}
}
}
halleyw 2003-09-24
  • 打赏
  • 举报
回复
难道没人好好回答一下吗?
真受打击!
我从来都是仔细回答别人的问题的(如果我知道的话)!你们可以查一下!
难道中国最大的程序员网站就没有人能肯帮帮我吗?
halleyw 2003-09-24
  • 打赏
  • 举报
回复
谢了,楼上的仁兄!
现在没有环境编译
后天成功后马上揭帖!
syngle 2003-09-23
  • 打赏
  • 举报
回复
用Canvas类的hasRepeatEvents()方法来检查是否支持
jofield 2003-09-23
  • 打赏
  • 举报
回复
模拟keyRepeated(),
halleyw 2003-09-23
  • 打赏
  • 举报
回复
如果不用keyRepeated()的话,那有些游戏玩起来很不方便!!
大家开发的时候难道没有遇到吗????
wbq1099 2003-09-23
  • 打赏
  • 举报
回复
一般不用keyRepeated(),因为它有延时。用keyPressed()创建线程,用keyReleased()销毁线程。
halleyw 2003-09-23
  • 打赏
  • 举报
回复
我就是用hasRepeatEvents()来检查的呀!
他说不支持!!我想,怎么可能啊?
这可是最新的WTK2.0模拟器阿!!!

另外:Time和TimeTask怎么来模拟?
cd1860 2003-09-23
  • 打赏
  • 举报
回复
就是用楼上的方法检查,如果不技可以通过Time,和TimeTask进行模拟!

13,097

社区成员

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

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