j2me游戏编程按键处理:allAction&=~LPKeyMask.MASK_KEY_OK是什么意思;,~符作什么用?

作者&投稿:东方制 (若有异议请与网页底部的电邮联系)
请问j2me中gamecanvas键盘获取getKeyStates()只能判断上下左右,怎么让他判断数字键盘1.2.3等键~

protected keyReleased(int keycode)
按键:0 按键代码:KEY_NUM0 按键代码的数值:48
按键:1 按键代码:KEY_NUM1 按键代码的数值:49
按键:2 按键代码:KEY_NUM2 按键代码的数值:50
...
按键:9 按键代码:KEY_NUM9 按键代码的数值:57

按键:* 按键代码:KEY_STAR 按键代码的数值:42
按键:# 按键代码:KEY_POUND 按键代码的数值:35

gamescanvas中可以用keyPressed()方法,不过要调用getGameAction(keycode)方法来获得目前的键值对应的游戏动作。

  1. 平台比较

  J2me:

  开发平台

  Android:

  操作系统


  2. 工程结构比较(源代码,资源文件夹,图片,数据)

  J2me:

  Res:资源文件

  Src:源代码

  Android:

  Src:源代码

  Res\drawable:图片

  Resaw:声音

  Res\values:字符串

  Assets:数据文件


  3. 安装包比较

  J2me:

  Jad,jar

  Android:

  apk


  4. 代码结构比较

  J2me:

  MIDlet,Canvas

  Android:

  Activity,View

  都采用继承的方式,都只有一个MIDlet/Activity,一般都只有一个Canvas/View


  5. 代码细节比较


  l 全屏设置

  J2me:

  在Canvas类中调用SetFullScreenMode(Boolean)

  Android:

  在Activity类中调用

  //设定全屏显示

  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

  WindowManager.LayoutParams.FLAG_FULLSCREEN);


  requestWindowFeature(Window.FEATURE_NO_TITLE);


  2 获得屏幕尺寸

  J2me:

  Canvas类的getHeight()和getWidth()方法

  Android:

  int screenWidth,screenHeight;

  WindowManager windowManager = getWindowManager();

  Display display = windowManager.getDefaultDisplay();
  screenWidth = display.getWidth();
  screenHeight = display.getHeight();


  3 Display

  J2me:

  Display dis=Display.getDisplay(MIDlet);

  Android:

  Display display = windowManager.getDefaultDisplay();


  4 画布类

  J2me:

  Canvas

  Android:

  继承View类,定义构造方法:

  public MyView(Context context)

  {

  super(context);

  }

  5 屏幕绘制方法

  J2me:

  Paint(Graphics)

  Android:

  void onDraw(Canvas g)


  6 Graphics

  J2me:

  Android:


  7 Image的创建

  J2me:

  Image.createImage(path);

  Android:

  img = BitmapFactory.decodeResource(getResources(),R.drawable.map0);


  8 Font的创建,Font使用,字体设置

  J2me:

  Android:


  9 drawImage

  J2me:

  Android:

  public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint)

  多个重载


  10 字符串绘制

  J2me:

  Android:

  public native void drawText(String text, float x, float y, Paint paint);

  多个重载


  11 setClip

  J2me:

  Android:

  public boolean clipRect(float left, float top, float right, float bottom,Region.Op op)

  最后一个参数为:Region.Op.REPLACE


  12旋转

  J2me:

  drawRegion()

  drawImage()

  Android:

  还没找到好的方法,不过可以先创建一张翻转后的图片,再使用,封装好的代码如下:

  //创建翻转图片

  public Bitmap createTransImage(Bitmap img,int trans)

  {

  // Bitmap img;

  try

  {

  // img = BitmapFactory.decodeResource(getResources(),sImg);


  int width = img.getWidth();

  int height = img.getHeight();


  int newWidth = 200;

  int newHeight = 200;


  // calculate the scale - in this case = 0.4f

  float scaleWidth = ((float) newWidth) / width;

  float scaleHeight = ((float) newHeight) / height;


  // createa matrix for the manipulation

  Matrix matrix = new Matrix();

  // resize the bit map

  matrix.postScale(scaleWidth, scaleHeight);

  // rotate the Bitmap

  int degree=0;


  Bitmap resizedBitmap=null;

  int data[];

  int buf;


  switch(trans)

  {

  case ROTATE_HOR:

  //创建镜像翻转

  data=new int [img.getWidth()*img.getHeight()];

  img.getPixels(data, 0, img.getWidth(), 0, 0, img.getWidth(),img.getHeight());

  //交换数据

  for(int i=0;i<img.getHeight();i++)

  for(int j=0;j<img.getWidth()/2;j++)

  {

  buf=data[i*img.getWidth()+j];

  data[i*img.getWidth()+j]=data[img.getWidth()*(i+1)-(j+1)];

  data[img.getWidth()*(i+1)-(j+1)]=buf;

  }


  resizedBitmap=Bitmap.createBitmap(data, img.getWidth(),

  img.getHeight(), Bitmap.Config.ARGB_4444);;

  return resizedBitmap;

  case ROTATE_VER:

  //创建镜像翻转

  data=new int [img.getWidth()*img.getHeight()];

  img.getPixels(data, 0, img.getWidth(), 0, 0, img.getWidth(),img.getHeight());

  //交换数据

  for(int i=0;i<img.getHeight()/2;i++)

  for(int j=0;j<img.getWidth();j++)

  {

  buf=data[i*img.getWidth()+j];

  data[i*img.getWidth()+j]=data[(img.getHeight()-i-1)*img.getWidth()+j];

  data[(img.getHeight()-i-1)*img.getWidth()+j]=buf;

  }


  resizedBitmap=Bitmap.createBitmap(data, img.getWidth(),

  img.getHeight(), Bitmap.Config.ARGB_4444);;


  return resizedBitmap;

  case ROTATE_90:

  matrix.postRotate(90);

  // recreate the new Bitmap

  resizedBitmap = Bitmap.createBitmap(img, 0, 0,

  width, height, matrix, true);

  return resizedBitmap;

  case ROTATE_180:

  matrix.postRotate(180);

  // recreate the new Bitmap

  resizedBitmap = Bitmap.createBitmap(img, 0, 0,

  width, height, matrix, true);

  return resizedBitmap;

  case ROTATE_270:

  matrix.postRotate(270);

  // recreate the new Bitmap

  resizedBitmap = Bitmap.createBitmap(img, 0, 0,

  width, height, matrix, true);

  return resizedBitmap;

  }

  return resizedBitmap;

  }

  catch (Exception e)

  {

  return null;

  }

  }


  13 drawRect

  J2me:

  Android:

  public void drawRect(float left, float top, float right, float bottom,Paint paint)


  14 声音处理

  J2me:

  Android:

  创建:

  MediaPlayer coverSound =MediaPlayer.create(Activity,R.raw.back);

  coverSound.prepare();

  播放:

  coverSound.start();

  暂停:

  coverSound.pause();

  声音设置:

  AudioManager vc = (AudioManager)Activity.getSystemService(Context.AUDIO_SERVICE);

  vc.adjustVolume(AudioManager.ADJUST_LOWER, 1);

  关闭:

  coverSound.stop();

  coverSound.release();


  15 中断处理

  J2me:

  Android:

  public void onWindowFocusChanged(boolean visibility)


  16 填充屏幕

  J2me:

  Android:

  CanvasInstance.drawColor(int color)


  l7 按键处理

  J2me:

  Android:

  要使按键可以被响应,需要在构造函数中调用

  this.setFocusable(true);

  处理方法:

  public boolean onKeyDown(int keyCode, KeyEvent msg)

  public boolean onKeyUp(int keyCode, KeyEvent msg)


  18 触摸屏处理

  J2me:

  Android:

  public boolean onTouchEvent(MotionEvent me)

  {

  if(me.getAction()==MotionEvent.ACTION_DOWN)

  。。。。。。

  else if(me.getAction()==MotionEvent.ACTION_UP)

  。。。。。。

  return true;

  }


  19 资源文件的的存放位置及读取

  J2me:

  Android:

  图片:

  Res\drawable:

  声音:

  Resaw

  数据:

  Asserts

  InputStream is=ActivityInstance.getAssets().open(path + ".dat");


  20 屏幕刷新,

  J2me:

  repaint()

  Android:

  postInvalidate();


  21 颜色的使用

  J2me:

  Android:

  PaintInstance.setColor(0xAARRGGBB);


  22 数据保存和读取

  J2me:

  Android:

  保存:

  SharedPreferences settings = ActivityInstance.getSharedPreferences(String name,int mode);

  SharedPreferences.Editor editor = settings.edit();

  editor.putBoolean("hasRec", true);

  。。。。。

  editor.putInt("ex",enemy[i].i_X_abs);

  editor.commit();


  读取:

  SharedPreferences settings = ActivityInstance.getSharedPreferences (String name,int mode);

  this.curFaceDirection=settings.getInt("cd", 0);


  23 填充方式

  J2me:

  Android:

  paint.setStyle(Style.FILL);

  paint.setStyle(Style.STROKE);


  24锚点

  J2me:

  Android:

  setTextAlign(Paint.Align.LEFT);


  25 连接处理

  J2me:

  HttpConnection conn = (HttpConnection) Connector.open("www.baidu.com", Connector.READ, true);

  conn.setRequestMethod("GET");

  conn.setRequestProperty("accept", "**");


  String location = conn.getRequestProperty("location");

  int resCode = conn.getResponseCode();


  InputStream stream = conn.getInputStream();

  conn.disconnect();


  总结了一下,有以下几点不同之处:


  J2ME中的连接从Connector打开,Android中从URL对象打开

  要设置连接是否可读写,J2ME中可以直接在Connector.Open时设置,而在Android中必须使用setDoInput(boolean)和setDoOutput(boolean)方法设置

  在J2ME中可以在Connector.Open中对连接进行超时设置,在Android中使用setConnectTimeout(int)不仅可以对连接超时进行设置,还能设置超时时间,参数为0时忽略连接超时


  在使用这些Api时,一定要注意每个参数的意义,比如j2me中drawRect的后两个参数为宽度和高度,而在Android中则变成了结束点的坐标,使用时千万不能想当然的随意传参。

  对于Override方法的定义,一定别忘了super.的方式来进行回调。


  上面基本上把J2ME和Android在2D游戏游戏开发中常用的API做了一个比较,了解这些内容后,基本上是可以比较容易地把ME的游戏游戏平顺地迁 移到Android平台。当然,此处只限制为游戏,如果你想把一款J2ME的软件迁移到Android平台,此方法并不适用,你需要学习android的 控件的使用

在C语言中,~符作取反使用,比如:
MASK_KEY_UP=0x0004
则,~MASK_KEY_OK 结果为 0xFFFB

UP的值为1,&=~...后,实际是屏蔽掉一些位


寻求一个VB编程的朋友给我一个游戏自动喊话的代码
'建立2个text文本,text1,text2,2个按钮command1,commadn2,一个记时器timer1 'text1是喊话的内容.'text2是每隔多少秒喊一次 'command1是开始喊话 'command2是停止.代码是在下面复制到窗体里就OK了.'--- Dim i As Integer Private Sub Command1_Click()Me.WindowState = 1 Timer1.Enabled ...

各位老师好,我想学习安卓手机游戏开发,需要学习哪些方面的知识,有深造...
Tanjurd要学Android游戏编程 游戏是Android应用商店中的一个大分类,也是智能手机的一大亮点。需要学习SurfaceView、动画绘制、图形图像的碰撞和检测、地图的设计、数据存储、传感器编程、网络编程、多媒体编程、事件处理等等的回顾,编写2D游戏。通过对OpenGL3D内容的介绍,了解在Android上开发3D游戏的基本技能。...

如何利用Android编程实现GPS定位
2. Android SDK3. 开发Android程序的Eclipse 插件 为了开始我们的工作,首先要安装Eclipse,然后从Google的网站获得Android SDK,并且安装Eclipse插件。 二、Activity类每一种移动开发环境都有自己的基类。如J2ME应用程序的基类是midlets,BREW的基类是applets,而Android程序的基类是 Activity。这个activity为我们提供了对移动...

用vb编程编一个小游戏
Then For j = 0 To 9 If Label1(j).Caption = UCase(Chr(KeyAscii)) Then m = m + 1 If m = 30 Then Me.Caption = "第1级" If m = 60 Then Me.Caption = "第2级" If m = 90 Then Me.Caption = "第3级" Label1(j).Top = 0 Exit For En...

关于电脑游戏的问题
例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示“Ox060692f6”(每次变化)指令引用的“Oxff000011”内存不能为“read”,终止程序请按确定。解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。还不行,只好换就用别的播放器试试了。例五:双击一个游戏的快捷方式,“Ox77...

用VB怎么做一个小游戏啊?
Case 2 '退出 Beep msg = MsgBox("您要退出本游戏吗?", 4 + 32, "BS贪食蛇") Select Case msg Case 6 End Case 7 Me.chkWindowButton(2).Value = 0 Exit Sub End Select End SelectEnd Sub'该过程用于设置蛇运动速度的快慢Private Sub hsbGameSpeed_Change() Me.tmrSnakeMove.Interval = Me.hsbGam...

什么键盘适合竞技游戏???
KeyTips是一个交互式帮助程序,可以让您快速、简便地测试和检验战霸标准键面的不同主要功能。参考价格:490RMB 2.战霸2代游戏键盘 Z-MERC集成了先进的Z-ENGINE技术,是一款性能优异的混合型键盘。 Z-MECR的创新款式和按键设计充分考虑玩家需要。游戏中的人体工程学设计源自多年的潜心研究,融合数十万...

罗技方向盘如何校正?最佳答案100分!
(详细说明可点击它的Readme按钮查看) (特别鸣谢-Z-先生将DXTweak推荐和介绍给我们) 关于方向盘在游戏前的通用校准事项,基本就这么多了,至于各方向盘自带的驱动里提供的其他一些特殊功能,因为本人使用过的控制器非常有限,无法一一给大家进行详细的介绍。请大家查阅各自的控制器说明书以获得相关信息。这里只以微软...

如何设置术士的宏命令?
使用这个宏的条件:在大包包第二格放了回复药,快捷栏第11,12分别是一单手一盾的快捷方式。 使用这个宏后,角色自动喝回复药,装备上盾,使用Thunder Clap(这三个动作同时进行),向后转180度后开自动跑步键逃走。其中技能等可以根据需要自己改。怎么样,是不是很夸张啊,哈哈。 还有一些有用的宏: 切换装备, 双手...

你玩游戏打发时间,别人玩游戏学编程。盘点三款steam AI\/编程向游戏
引导玩家学习基础的Linux终端命令和黑客技巧。你将扮演角色,逐步揭示黑客世界的奥秘,体验真实的编程实战。如果你想深入了解这些游戏的详细评测,可以观看我在B站的视频(链接在片尾),别忘了在观看后给予支持,点赞、收藏和投币哦!我的B站主页和个人网站(ijst.me\/wp)也欢迎你的访问。

赤水市18243161507: j2me游戏编程按键处理:allAction&=~LPKeyMask.MASK - KEY - OK是什么意思;,~符作什么用? -
红泡瓜霜: 在C语言中,~符作取反使用,比如:MASK_KEY_UP=0x0004 则,~MASK_KEY_OK 结果为 0xFFFB UP的值为1,&=~...后,实际是屏蔽掉一些位

赤水市18243161507: 手游开发j2me需要安装哪些软件,如何安装?
红泡瓜霜: 在进行J2ME程序需要开发的时候,使用的开发工具分为两类: l 通用开发工具——适合所有手机的通用工具 l 专用开发工具——适合某种型号的手机的开发工具,例如Nokia 下面介绍一下通用开发工具J2ME Wireless Toolkit(J2WTK),最近SUN...

赤水市18243161507: 手机游戏如何学起 -
红泡瓜霜: J2ME编程需要掌握的七种技术 J2ME编程是Java在智能家电领域的应用,主要包含以下技术: 1、高级用户界面高级用户界面是指J2ME编程中用到的Form(窗体)、TextBox(文本框)、List(列表框)和Alert(提示信息框)等的使用,以...

赤水市18243161507: j2me 里面游戏编程 谁有简单代码我看看 -
红泡瓜霜: mport javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Graphics; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class ...

赤水市18243161507: 什么是J2ME? -
红泡瓜霜: 上面的都已经给J2ME下定义了,随着手机智能化的步伐加快,可以从事手机软件和手机游戏的开发,掌上PDA等等.不要担心自己学完自后无用武之地

赤水市18243161507: 手机顽童模拟器下载 -
红泡瓜霜: 下载地址已发送到你的消息内了.谢谢塞班论坛有,链接地址发不上来,楼主需要自己去找,愿意吗?【软件介绍】KEmulater是目前最强大的手机J2ME(java)游戏或软件的模拟器,对于某些扣费的游戏你不...

赤水市18243161507: 关于J2me 求高手 指点 下面 每段 代码 的 意思..... -
红泡瓜霜: display=Display.getDisplay(this);//获取当前入口类并设置为当前可以显示的display form=new Form("Gauge");//new一个Form控件并设置...

赤水市18243161507: J2ME到底是什么? -
红泡瓜霜: J2ME,即Java 2 Micro Edition,是SUN公司推出的在移动设备上运行的微型版Java平台,常见的移动设备有手机,PDA,电子词典,以及各式各样的信息终端如机顶盒等等. 由于移动终端的类型成千上万,而且计算能力差异非常大,不可能像...

赤水市18243161507: J2ME游戏开发的高级优化技巧是什么?
红泡瓜霜: 为什么要优化? 游戏能够被划分为两种较广泛的类型:实时型和按键驱动型.按键驱动类型的游戏一般在屏幕上显示游戏目前所处的状态,并且等待玩家输入某些按键来驱...

赤水市18243161507: 什么是kjava?
红泡瓜霜: KJava即J2ME(Java 2 Micro Edition),是Sun公司专门用于嵌入式设备的Java软件.以KJava编程语言为手机开发应用程序,可以提供游戏、个人信息处理、股票、电子地图等服务程序.J2ME(Java 2 Micro Edition)是致力于消费产品和嵌入式设...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网