亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

教您如何解決J2ME開發中的連續按鍵問題

2019-11-17 06:23:19
字體:
來源:轉載
供稿:網友

  本文主要講述在MIDP1.0情況下處理開發過程碰到的連續按鍵事件,結合具體的實例給出一種實用的解決方案。我們知道MIDP中的低級事件處理是通過keyPRessed()、keyReleased()和keyRepeated()來處理的,分別在按鍵被按下、釋放和重復按鍵的時候被觸發。
  
  當方法被調用的時候,系統會把所按下鍵的鍵值傳遞給上述的三個方法,根據按鍵的鍵值我們可以進行相關的處理。在MIDP中定義了如下的按鍵值分別是: KEY_NUM0, KEY_NUM1, KEY_NUM2, KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8, KEY_NUM9, KEY_STAR 和 KEY_POUND。
  
  在游戲開發中為了保證程序的可移植性,通常我們都會把鍵值轉換為游戲動作,在MIDP中定義了如下的游戲動作: UP, DOWN, LEFT, RIGHT, FIRE, GAME_A, GAME_B, GAME_C,GAME_D。轉換非常簡單,可以通過Canvas提供的方法getGameAction()。
  
  一般來說處理keyPressed()和keyReleased()都比較輕易,但是處理按鍵一直被按下的情況稍微復雜一些。因為我們使用的設備并不一定支持連續按鍵的事件。你可以通過方法hasRepeatEvents()來檢測平臺是否支持當按鍵持續按下的時候產生重復事件。假如支持那么你可以在keyRepeated()的方法中處理相關邏輯,假如不支持那么你必須采取其他的方法。
  
  這里筆者介紹一種通過設置標志位的方式來處理連續按鍵的方法。其實原理非常的簡單,我們通過設置標志位判定按鍵是否被按下了,比如我們判定LEFT是不是被按下了。當LEFT被按下的時候,我們把成員變量leFTPressed設置為true,代碼如下:
  
  public void keyPressed(int keyCode)
  {
  int action = getGameAction(keyCode);
  
  switch (action)
  {
  
  case LEFT:
  left();
  leftPressed = true;
  break;
  
  case RIGHT:
  right();
  rightPressed = true;
  break;
  
  default:
  break;
  
  }
  repaint();
  
  }
  
  當按鍵被釋放的時候,我們就把相關的標記位設置為false。
  
  public void keyReleased(int keyCode)
  {
  int action = getGameAction(keyCode);
  
  switch (action)
  {
  case LEFT:
  leftPressed = false;
  buttonPressed = "";
  break;
  
  case RIGHT:
  rightPressed = false;
  buttonPressed = "";
  break;
  default:
  break;
  }
  repaint();
  
  }
  
  這樣我們在重新繪制屏幕的時候就可以根據標記位的狀態進行繪畫了:
  
  if (leftPressed)
  {
  left();
  }
  if (rightPressed)
  {
  right();
  }
  
  筆者給出一個簡單的實例來進行論證,我們制作一個MIDlet,當用戶按下LEFT的時候,J2ME字符串向左側移動,當用戶按下RIGHT的時候,J2ME字符串向右側移動。簡單起見,我沒有處理DOWN和UP的情況。下面是應用程序截圖和源代碼。
  
  package com.j2medev;
  
  import javax.microedition.lcdui.*;
  import javax.microedition
  .midlet.MIDlet;
  import javax.microedition
  .midlet.MIDletStateChangeException;
  
  public class KeyActionMIDlet
  extends MIDlet
  {
  
  private Display display;
  
  private MainCanvas mainCanvas;
  
  protected void startApp()
  throws MIDletStateChangeException
  {
  
  display = Display.getDisplay(this);
  mainCanvas = new MainCanvas();
  new Thread(mainCanvas).start();
  display.setCurrent(mainCanvas);
  
  }
  
  protected void pauseApp()
  {
  
  }
  
  protected void destroyApp
  (boolean arg0)
  throws MIDletStateChangeException
  {
  
  }
  
  }
  
  package com.j2medev;
  
  import javax.microedition.lcdui.*;
  
  public class MainCanvas extends
  Canvas implements Runnable
  {
  private String buttonPressed;
  
  private boolean leftPressed;
  
  private boolean rightPressed;
  
  private int px = getWidth() / 2;
  
  public final int py = getHeight() / 2;
  
  public MainCanvas()
  {
  buttonPressed = " ";
  }
  
  private void left()
  {
  if (px >= 0)
  {
  px--;
  }
  buttonPressed = "LEFT";
  repaint();
  }
  
  private void right()
  {
  if (px <= getWidth())
  {
  px++;
  }
  buttonPressed = "RIGHT";
  repaint();
  }
  
  public void run()
  {
  while (true)
  {
  if (leftPressed)
  {
  left();
  }
  if (rightPressed)
  {
  right();
  }
  
  try
  {
  Thread.sleep(50);
  } catch (InterruptedException e)
  {
  e.printStackTrace();
  }
  }
  
  }
  
  public void paint(Graphics g)
  {
  g.setColor(0xFFFFFF);
  g.fillRect(0, 0, getWidth(),
  getHeight());
  g.setColor(0x000000);
  
  g.drawString(buttonPressed, 20,
  20, Graphics.LEFT Graphics.TOP);
  g.drawString("J2ME", px, py,
  Graphics.HCENTER Graphics.TOP);
  
  }
  
  public void keyReleased(int keyCode)
  {
  int action = getGameAction(keyCode);
  
  switch (action)
  {
  case LEFT:
  leftPressed = false;
  buttonPressed = "";
  break;
  
  case RIGHT:
  rightPressed = false;
  buttonPressed = "";
  break;
  default:
  break;
  }
  repaint();
  
  }
  
  public void keyPressed(int keyCode)
  {
  int action = getGameAction(keyCode);
  
  switch (action)
  {
  
  case LEFT:
  left();
  leftPressed = true;
  break;
  
  case RIGHT:
  right();
  rightPressed = true;
  break;
  
  default:
  break;
  
  }
  repaint();
  
  }
  
  public void keyRepeated(int keyCode)
  {
  int action = getGameAction(keyCode);
  switch (action)
  {
  case LEFT:
  left();
  break;
  case RIGHT:
  right();
  break;
  
  default:
  break;
  }
  repaint();
  
  }
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲va久久久噜噜噜久久天堂| 欧美亚洲视频在线观看| 黑人巨大精品欧美一区二区三区| 精品久久久久久久久久久久久| 日本一区二区在线免费播放| 亚洲激情视频在线| 久久久精品久久久| 久久精品免费播放| 久久伊人91精品综合网站| 91精品视频免费| 欧美裸体xxxxx| 日韩av理论片| 国产成人激情小视频| 久久理论片午夜琪琪电影网| 亚洲第一区中文字幕| 国产成人亚洲综合91精品| 国模精品视频一区二区三区| 日韩精品视频在线播放| 亚洲a∨日韩av高清在线观看| 欧美国产第一页| 国产精品美女免费看| 亚洲最新在线视频| 亚洲电影av在线| 国产亚洲精品日韩| 日韩免费电影在线观看| 在线观看日韩视频| 精品无人区乱码1区2区3区在线| 97国产suv精品一区二区62| 日韩成人在线免费观看| 啊v视频在线一区二区三区| 日本不卡视频在线播放| 91av免费观看91av精品在线| 91久久国产综合久久91精品网站| 欧美亚洲国产成人精品| 日韩欧美高清在线视频| 中文字幕久久久av一区| 午夜精品视频网站| 国产精品视频久久久久| 亚洲国产精品热久久| 中文字幕在线看视频国产欧美| 一本大道香蕉久在线播放29| 亚洲码在线观看| 欧美一级片一区| 91精品国产自产在线观看永久| 亚洲最大的成人网| 亚洲国产成人精品女人久久久| 国产精品视频中文字幕91| 国产精品视频自拍| 国产精品视频内| 中文字幕日韩有码| 国产亚洲xxx| 国产精品久久久久999| 97超级碰碰碰久久久| 91久久久久久国产精品| 久久久亚洲国产| 亚洲欧美一区二区三区在线| 亚洲人在线观看| 国产精品直播网红| 久久久女人电视剧免费播放下载| 欧美精品xxx| 欧美日本啪啪无遮挡网站| 91精品国产91久久久久久最新| 国模视频一区二区| 国产精品美乳一区二区免费| 精品美女久久久久久免费| 91在线免费看网站| 久久影视免费观看| 久久99热精品这里久久精品| 亚洲韩国青草视频| 91理论片午午论夜理片久久| 91网在线免费观看| 欧美黑人国产人伦爽爽爽| 中文字幕一精品亚洲无线一区| 亚洲国产日韩欧美综合久久| 欧美日韩中文在线观看| 国产日韩精品入口| 成人av在线网址| 欧美国产精品人人做人人爱| 国产精品久久色| 成人自拍性视频| 欧美午夜久久久| 日韩精品视频免费| 国内揄拍国内精品少妇国语| 96pao国产成视频永久免费| 欧美日韩国产成人在线观看| 麻豆一区二区在线观看| 九九热精品视频国产| 久久久久久18| 日韩欧美中文字幕在线观看| 亚洲午夜女主播在线直播| 亚洲天堂视频在线观看| 欧美电影院免费观看| 永久免费毛片在线播放不卡| 尤物精品国产第一福利三区| 久久91亚洲人成电影网站| 久久综合网hezyo| 日韩免费电影在线观看| 97人人模人人爽人人喊中文字| 欧美另类暴力丝袜| 欧美日韩亚洲网| 欧美一级电影免费在线观看| 欧美成年人视频网站| 色99之美女主播在线视频| 欧美一性一乱一交一视频| 91精品国产综合久久久久久久久| 欧美成人免费一级人片100| 亚洲人成网站在线播| 欧美精品18videos性欧美| 久久香蕉频线观| 日韩视频一区在线| 国产亚洲精品成人av久久ww| 亚洲图片在区色| 91最新国产视频| 亚洲第一男人天堂| 狠狠躁18三区二区一区| 欧美老少做受xxxx高潮| 国产成人精品久久二区二区| 日韩精品在线视频美女| 国产女人精品视频| 国产成人福利网站| 国内精品国产三级国产在线专| 国模叶桐国产精品一区| 欧美理论电影在线观看| 91超碰caoporn97人人| 91欧美精品午夜性色福利在线| 欧美日韩免费一区| 日韩在线免费视频| 久久久免费电影| 久久精品国产96久久久香蕉| 日韩免费观看网站| 国产日产久久高清欧美一区| 欧美极品美女视频网站在线观看免费| 成人免费网站在线观看| 欧美性猛交xxxxx水多| 国产精品免费一区二区三区都可以| 久久久免费观看| 中文字幕视频在线免费欧美日韩综合在线看| 欧美日韩中文字幕在线视频| 国产不卡在线观看| 日韩av网站在线| 国产精品久久久久久久久久免费| 最近中文字幕mv在线一区二区三区四区| 亚洲欧美日韩另类| 欧美精品在线网站| 亚洲欧美在线一区二区| 久久久精品一区二区三区| 国产精品久久色| 自拍偷拍亚洲在线| 日韩精品亚洲视频| 日韩美女激情视频| www.色综合| 日韩欧美aaa| 26uuu国产精品视频| 日韩综合中文字幕| 中文字幕日韩高清| 日韩黄在线观看| 中文字幕欧美日韩| 精品久久久久久久久国产字幕| 欧美亚洲在线视频| 国产不卡一区二区在线播放| 国产+成+人+亚洲欧洲| www.欧美三级电影.com| 亚洲国语精品自产拍在线观看| 色综合视频一区中文字幕|