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

📄 imagemove.java

📁 键盘事件促使图象移动程序
💻 JAVA
字号:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public  class ImageMove extends MIDlet implements AppExiter{
  protected void startApp(){
         Display.getDisplay(this).setCurrent(new ImageMoveScreen(this));
  }
  protected void pauseApp(){}

  protected void destroyApp(boolean b){
      notifyDestroyed();
  }

  public void exitApp(){
      destroyApp(true);
  }



}

class ImageMoveScreen extends Canvas implements CommandListener{
  private int m_screenWidth = getWidth();
  private int m_screenHeight = getHeight();
  private int m_imageWidth;
  private int m_imageHeight;

  private int m_x;
  private int m_y;
  private int m_dx = 0;
  private int m_dy = 0;

  private AppExiter m_appExiter;
  private KeyRepeater m_repeat = new KeyRepeater();

  private Image m_origImage;
  private Image m_screenBuf;
  private Graphics m_bufferGraphics;

  public ImageMoveScreen(AppExiter exiter) {
    m_appExiter = exiter;
    try {
      m_origImage = Image.createImage("/picture.png");
    }
    catch (Exception ee) {
      m_origImage = null;
      System.out.println(ee.toString());
    }
    m_imageWidth = m_origImage.getWidth();
    m_imageHeight = m_origImage.getHeight();
    m_x = (m_screenWidth - m_imageWidth) / 2;
    m_y = (m_screenHeight - m_imageHeight) / 2;

    m_screenBuf = Image.createImage(m_screenWidth, m_screenHeight);
    m_bufferGraphics = m_screenBuf.getGraphics();
    m_bufferGraphics.setColor(0, 0, 0);
    m_bufferGraphics.fillRect(0, 0, m_screenWidth, m_screenHeight);

    addCommand(AppExiter.EXIT);

    setCommandListener(this);
    m_repeat = new KeyRepeater();
    m_repeat.start();

  }

  protected void paint(Graphics g) {
    m_bufferGraphics.drawImage(m_origImage, m_x, m_y,
                               m_bufferGraphics.TOP | m_bufferGraphics.LEFT);
    g.drawImage(m_screenBuf, 0, 0, Graphics.TOP | Graphics.LEFT);
    g.setColor(255, 255, 255);
    g.drawString(m_x + "  " + m_y, 0, 0, Graphics.TOP | Graphics.LEFT);
  }

  protected void keyRepeated(int keyCode) {
    if (hasRepeatEvents()) {
      moveImage(getGameAction(keyCode));

    }
  }

  protected void keyPressed(int keyCode) {
    if (!hasRepeatEvents()) {
      m_repeat.start();
      m_repeat.startRepeat(keyCode);


    }
    moveImage(getGameAction(keyCode));
  }
  protected void keyRelease(int keyCode){
      if(!hasRepeatEvents()){
          m_repeat.stopRepeat(keyCode);
      }
  }
  protected void moveImage(int gameAction) {
      switch(gameAction){
          case UP:
            if(m_y < 0){
                m_y++;break;
            }
          case DOWN:
            if(m_y > m_screenHeight - m_imageHeight)
                m_y--;break;
          case LEFT:
            if(m_x < 0)
            {
                m_x++;break;
            }
          case RIGHT:
            if(m_x > m_screenWidth - m_imageWidth){
                m_x--;break;
            }
          repaint();

      }
  }
  protected void pointerPressed(int x, int y){
    if (hasPointerEvents()) {
      m_dx = x;
      m_dy = y;

    }
  }
  protected void pointerDragged(int x,int y){
      if(hasPointerMotionEvents()) {
          m_y += y - m_dy;
          m_x += x - m_dx;
          m_dx = x;
          m_dy = y;

      if(m_y > 0){
          m_y = 0;
      }else if(m_y < m_screenHeight - m_imageHeight){
          m_y = m_screenHeight - m_imageHeight;

      }
      if(m_x > 0)
      {
          m_x = 0;
      }else if(m_x < m_screenWidth - m_imageWidth){
          m_x = m_screenWidth - m_imageWidth;
      }
      repaint();

      }

  }

  public void commandAction(Command c,Displayable d){
      if(c == ImageMove.EXIT){
          m_repeat.done();
          m_repeat = null;
          m_appExiter.exitApp();
      }
  }

  class KeyRepeater extends Thread{
      private boolean m_done = false;
      private int m_gameAction ;

      public synchronized void done(){
          m_done = true;
      }
      public synchronized void startRepeat(int keyCode){
          m_gameAction = getGameAction(keyCode);

      }
      public  synchronized void stopRepeat(int keyCode){
          if(getGameAction(keyCode) == m_gameAction)
              m_gameAction = 0;
      }
      public void run(){
          while(!m_done){
              while(m_gameAction == 0 && !m_done) {
                  Thread.yield();

              }
              synchronized(this)
              {
                  try{
                      sleep(10);
                  }catch(InterruptedException ee){
                      System.out.println(ee.toString());
                  }
              }
              moveImage(m_gameAction);
          }
      }
  }
}


interface AppExiter{
    public static final Command EXIT = new Command("Exit",Command.EXIT,1);
    public void exitApp();
}

⌨️ 快捷键说明

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