⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadcanvas.java

📁 基于java的一款游戏的故事。基于java的一款游戏的故事。基于java的一款游戏的故事。
💻 JAVA
字号:
package com.thinkenjoy.control;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

//#if NOK_7260 || NOK_7210 || NOK_6101 || NOK_6230i || NOK_7370 || NOK_QD || SON_K700C
//import com.nokia.mid.ui.FullCanvas;
//#endif


/**
 *  绘制类,负责绘制Control类中的指向的界面
 */
//#if NOK_7260 || NOK_7210 || NOK_6101 || NOK_6230i || NOK_7370 || NOK_QD || SON_K700C
//public class ThreadCanvas extends FullCanvas implements Runnable{
//#else
public class ThreadCanvas extends Canvas implements Runnable {
  //#endif

  //#if NOK_7260
  //# public static final short SCREEN_WIDTH = 128;
  //# public static final short SCREEN_HEIGHT = 128;
  //#else
  //#if NOK_7370 || MOT_E2
  //# public static final short SCREEN_WIDTH = 240;
  //# public static final short SCREEN_HEIGHT = 320;
  //#else
  //#if NOK_6230i
  //# public static final short SCREEN_WIDTH = 208;
  //# public static final short SCREEN_HEIGHT = 208;
  //#else
  //#if NOK_6101
  //# public static final short SCREEN_WIDTH = 128;
  //# public static final short SCREEN_HEIGHT = 160;
  //#else
  public static final short SCREEN_WIDTH = 176;
  public static final short SCREEN_HEIGHT = 208;
  //#endif
  //#endif
  //#endif
  //#endif
  public static final int FPS = 50;

  /**
   * 最小休眠的时间,解决某些手机的按键延迟问题
   */
  private static final int MIN_SLEEP = 5;

  public static boolean flag = true;

  public ThreadCanvas() {
    //#if NOK_QD
    //# start();
    //#else
    this.setFullScreenMode(true);
    start();
    //#endif
  }

  /**
   * 由线程调用,通过其控制ActorCanvas子类的cycle方法
   *
   */
  public void cycle() {
    if (Control.getDisplay() != null) {
      Control.getDisplay().cycle();
    }
  }

  /**
   * 由线程调用,通过其控制ActorCanvas子类的paint方法
   *
   */
  public void paint(Graphics g) {
    // paint waht you want
    if (Control.getDisplay() != null) {
      try {
        //#if NOK_7210 || NOK_7260
        //# g.setClip(0,0,128,128);
        //#endif
        //System.out.println("内存="+(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));
        Control.getDisplay().paint(g);
        //#ifdef debug
        //# // 画剩余内存
        //# g.setColor(0xffffff);
        //# g.fillRect(0, ThreadCanvas.SCREEN_HEIGHT - 20, 88, 20);
        //# g.setColor(0xff0000);
        //# g.drawString("mem: " + Runtime.getRuntime().totalMemory() + ":"
        //# + Runtime.getRuntime().freeMemory(), 0, ThreadCanvas.SCREEN_HEIGHT - 20, 0);
        //#endif
      } catch (Exception e) {
        g.setColor(0xffffff);
        g.fillRect(0, 20, ThreadCanvas.SCREEN_WIDTH, 60);
        g.setColor(0xff0000);
        System.out.println("error: " + e);
        g.drawString("Exception: " + e, 0, 20, 0);
        g.drawString("Exception: " + e, -ThreadCanvas.SCREEN_WIDTH, 40, 0);
        g.drawString("Exception: " + e, -ThreadCanvas.SCREEN_WIDTH * 2, 60, 0);
      }
    }
  }

  /**
   * the canvas thread start
   *
   */
  public void start() {
    Thread t = new Thread(this);
    t.start();
  }

  /**
   * the thread begin run,the timers is used to count the times for outside
   * called,control the cartoon's speed
   */
  public void run() {
    try {
      while (flag) {
        long lastTime = System.currentTimeMillis();
        cycle();
        repaint();
        serviceRepaints();
        long cycleTime = System.currentTimeMillis() - lastTime;
        if (cycleTime < FPS) {
          Thread.sleep(FPS - cycleTime);
        } else {
          Thread.sleep(MIN_SLEEP);
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * the Canvas key pressed Action
   */
  protected void keyPressed(int keyCode) {
    if (Control.getDisplay() != null) {
      int gameAction = getGameAction(keyCode);
      if (gameAction == Canvas.UP) {
        keyCode = KeyMap.UP;

      } else if (gameAction == Canvas.DOWN) {
        keyCode = KeyMap.DOWN;

      } else if (gameAction == Canvas.LEFT) {
        keyCode = KeyMap.LEFT;

      } else if (gameAction == Canvas.RIGHT) {
        keyCode = KeyMap.RIGHT;

      } else if (gameAction == Canvas.FIRE) {
        keyCode = KeyMap.FIRE;

      } else if (keyCode == Canvas.KEY_NUM1) {
        keyCode = KeyMap.NUM1;

      } else if (keyCode == Canvas.KEY_NUM3) {
        keyCode = KeyMap.NUM3;

      } else if (keyCode == Canvas.KEY_NUM0) {
        keyCode = KeyMap.NUM0;

      } else if (isPressedLeftSoftKey(keyCode)) { // 左软键
        keyCode = KeyMap.LEFT_SOFT;

      } else if (isPressedRightSoftKey(keyCode)) { // 右软键
        keyCode = KeyMap.RIGHT_SOFT;
      }
      Control.getDisplay().keyPressed(keyCode);
    }
  }

  /**
   * the Canvas key release Action
   */
  protected void keyReleased(int keyCode) {
    if (Control.getDisplay() != null) {
      int gameAction = getGameAction(keyCode);
      if (gameAction == Canvas.UP) {
        keyCode = KeyMap.UP;

      } else if (gameAction == Canvas.DOWN) {
        keyCode = KeyMap.DOWN;

      } else if (gameAction == Canvas.LEFT) {
        keyCode = KeyMap.LEFT;

      } else if (gameAction == Canvas.RIGHT) {
        keyCode = KeyMap.RIGHT;

      } else if (gameAction == Canvas.FIRE) {
        keyCode = KeyMap.FIRE;

      } else if (keyCode == Canvas.KEY_NUM1) {
        keyCode = KeyMap.NUM1;

      } else if (keyCode == Canvas.KEY_NUM3) {
        keyCode = KeyMap.NUM3;

      } else if (keyCode == Canvas.KEY_NUM0) {
        keyCode = KeyMap.NUM0;

      } else if (isPressedLeftSoftKey(keyCode)) { // 左软键
        keyCode = KeyMap.LEFT_SOFT;

      } else if (isPressedRightSoftKey(keyCode)) { // 右软键
        keyCode = KeyMap.RIGHT_SOFT;
      }
      Control.getDisplay().keyReleased(keyCode);
    }
  }

  /**
   * 通用型,判断是否按下了 左软键 ***
   *
   * @param keyCode
   *            键值
   * @return
   */
  private boolean isPressedLeftSoftKey(int keyCode) {
    if (keyCode == -6 || keyCode == 6 || keyCode == -21 || keyCode == 21
        || keyCode == -20) {
      return true;
    }

    return false;
  }

  /**
   * 通用型,判断是否按下了 右软键 ***
   *
   * @param keyCode
   *            键值
   * @return
   */
  private boolean isPressedRightSoftKey(int keyCode) {
    if (keyCode == -7 || keyCode == 7 || keyCode == -22 || keyCode == 22
        || keyCode == -21) {
      return true;
    }

    return false;
  }

  public void showNotify() {
    if (!Control.isStartShowNotify) {
      Control.isStartShowNotify = true;
    } else {
      Control.show(Control.MENU_STAGE);
    }
  }

  public void hideNotify() {
    Control.stopMusic();
    Control.show(Control.MENU_STAGE);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -