社区
J2ME
帖子详情
如何模拟连续按键
danielkoo
2003-12-12 02:58:46
在不支持连续按键的手机上如何模拟连续按键呢?用什么方法好呢?
我想应该使用线程把,但不知道具体怎样实现好!
...全文
92
3
打赏
收藏
如何模拟连续按键
在不支持连续按键的手机上如何模拟连续按键呢?用什么方法好呢? 我想应该使用线程把,但不知道具体怎样实现好!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kylinpro
2003-12-16
打赏
举报
回复
小弟觉得如果是一般应用的话,不一定非要用多线程实现,可以使用类似锁变量的方法至状态的切换,在keypressed时至ture,在keyup时至false。在实际的手机游戏上使用过,感觉还可以
danielkoo
2003-12-13
打赏
举报
回复
谢谢楼上的,之前我自己也实现了连续按键,方法基本上与你的相同。我的方法是不断的销毁和重新生成线程。不过我看了这段代码:public void run()
{
while (true)
{
while (hasRepeat)
{
try
{
PlayG();
Thread.sleep(10);
}
catch (Exception e)
{}
}
}
}
}
让我受益匪浅,此方法好多了!真的十分感激:)
itfly
2003-12-12
打赏
举报
回复
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;
public class KzYxPlay extends Canvas implements CommandListener,Runnable
{
private MIDlet midlet;
private Command cmExit;
private Image fj,Dj,zd,d_zd;
private Image BzT[] = new Image[3];//爆炸的图片
public int fj_x,fj_y,zd_y,zd_x,zd_yy,w_zd,df_zd,zd_x1;
private boolean fd=false;
private boolean hasRepeat;
private int gameAction;
private Timer repeatTimer;
private Thread thread;
private RepeatTask task;
private Random var;
public KzYxPlay(MIDlet midlet)
{
this.midlet=midlet;
cmExit= new Command("退出",Command.SCREEN,1);
addCommand(cmExit);
setCommandListener(this);
try
{
fj=Image.createImage("/fj.png");
BzT[0]=Image.createImage("/bz1.png");
BzT[1]=Image.createImage("/bz2.png");
BzT[2]=Image.createImage("/bz3.png");
Dj=Image.createImage("/dj.png");
zd=Image.createImage("/zd.png");
d_zd=Image.createImage("/d_zd.png");
}
catch(Exception e){}
fj_x=getWidth()/2;
fj_y=getHeight()-fj.getHeight();
w_zd=fj_y;
var = new Random();
thread = new Thread(this);
thread.start();
task = new RepeatTask();
repeatTimer = new Timer();
if(zd_x<=0&&zd_x1==0)
{
zd_x=30;
zd_x1=60;
}
}
public void showNotify()
{
repeatTimer.schedule(task,0);
}
public void paint(Graphics g)
{
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
g.drawImage(fj,fj_x,fj_y,0x10|0x04);
//for(int i=0;i<2;i++)
//{
if(zd_y<=getHeight())
{
g.drawImage(Dj,zd_x,zd_y,0x10|0x04);
g.drawImage(Dj,zd_x1,zd_y,0x10|0x04);
if(zd_yy<getHeight()&&zd_y<fj_y-25)
{
g.drawImage(d_zd,zd_x,zd_yy,0x10|0x04);
g.drawImage(d_zd,zd_x1,zd_yy,0x10|0x04);
zd_yy=(zd_yy+10);
}
else
{
zd_yy=zd_y;
}
zd_y+=3;
}
else
{
zd_x=Math.abs(var.nextInt())%getWidth();
zd_x1=Math.abs(var.nextInt())%getWidth();
if(Math.abs(zd_x-zd_x1)<d_zd.getWidth())
{
if(zd_x>zd_x1)
{
if(zd_x1+30>getWidth())
{
zd_x=zd_x1-30;
}
else
{
zd_x=zd_x1+30;
}
}
else
{
if(zd_x+30>getWidth())
{
zd_x1=zd_x+30;
}
else
{
zd_x1=zd_x-30;
}
}
}
zd_y=0;
}
// }
if(fd==true)
{
g.drawImage(zd,fj_x,w_zd,0x10|0x04);
g.drawImage(zd,fj_x+20,w_zd,0x10|0x04);
w_zd=w_zd-10;
if(w_zd<0)
{
w_zd=fj_y;
fd=false;
}
}
}
public void commandAction(Command c,Displayable d)
{
if(c==cmExit)
{
((KzYx)midlet).exitApp();
}
}
protected void keyRepeated(int keyCode)
{
gameAction=getGameAction(keyCode);
}
protected void keyPressed(int keyCode)
{
gameAction = getGameAction(keyCode);
hasRepeat = true;
}
protected void keyReleased(int keyCode)
{
hasRepeat = false;
}
public void PlayG()
{
switch(gameAction)
{
case LEFT:
if(fj_x>0)
fj_x-=3;
break;
case RIGHT:
if(fj_x<getWidth())
fj_x+=3;
break;
case UP:
if(fj_y>0)
fj_y-=3;
break;
case DOWN:
if(fj_y<getHeight())
fj_y+=3;
break;
case FIRE:
fd=true;
break;
}
repaint();
}
public void run()
{
while(true){
repaint();
try
{
Thread.sleep(10);
}
catch(InterruptedException interruptedexception) { }
}
}
class RepeatTask extends TimerTask
{
public void run()
{
while (true)
{
while (hasRepeat)
{
try
{
PlayG();
Thread.sleep(10);
}
catch (Exception e)
{}
}
}
}
}
}
我写的PAINT的部分乱写的,不多实现了重复按键的。你可以参考一下。我也参考了一位网友的游戏。!希望对你有帮助!
关于手机
连续
按键
的支持
相信做手机开发的朋友都知道,手机上有一个
连续
按键
的处理,j2me规范里面也提供了一个方法给予支持。现在市场上主流的机都支持了
连续
按键
,比如Nokia的S60系列,S40系列也是很多支持的,Nokia6600则不支持。国产品牌等机子的有些虚拟机不支持
连续
按键
。 对于不支持
连续
按键
的机子来说。用户操作时很不习惯的,特别是浏览一页比较大的文档,或者是玩手机游戏的用户来说。真是太不...
C++驱动级
模拟
按键
vs2013编写
C++驱动级
模拟
按键
vs2013编写 去发现同类优质开源项目:https://gitcode.com/ 此仓库包含了一个使用C++和wring0库编写的驱动级
模拟
按键
项目,适用于Visual Studio 2013开发环境。该项目旨在
模拟
按键
操作,但请注意,由于
模拟
按键
的特性,程序必须以管理员权限启动才能正常使用。 功能说明
模拟
键盘
按键
操作 驱动级实现,更难被常规钩子检测到 使用注意 请...
键盘
模拟
2
键盘
模拟
2昨天说到《红警3》的
连续
按键
不能用传统的方法
模拟
,因为它是使用了DirectInput,这绕过了消息队列。一般情况下我们
连续
按住一个键,产生的消息是: WM_KEYDOWN——WM_KEYDOWN——...WM_KEYDOWN——WM_KEYUP。(注意忽略了WM_CHAR,可能在每个WM_KEYDOWN后面有一个WM_CHAR消息)。而如果我将这些消息修改成WM_KEYDOWN——WM...
J2ME
13,096
社区成员
26,491
社区内容
发帖
与我相关
我的任务
J2ME
Java J2ME
复制链接
扫一扫
分享
社区描述
Java J2ME
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章