WEB开发网
开发学院软件开发Java 2D绘画操作中的坐标系统变换 阅读

2D绘画操作中的坐标系统变换

 2007-12-23 12:37:45 来源:WEB开发网   
核心提示:import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class Translate extends MIDlet{PRivate Displaydisplay; // The displayprivate Transla

2D绘画操作中的坐标系统变换

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Translate extends MIDlet
{
 PRivate Display display;   // The display
 private TranslateCanvas canvas;  // Canvas 
 public Translate()
 {
  display = Display.getDisplay(this);
  canvas = new TranslateCanvas(this);
 }
 protected void startApp()
 {
  display.setCurrent( canvas );
 }
 protected void pauseApp()
 { }

 protected void destroyApp( boolean unconditional )
 { }
 public void exitMIDlet()
 {
  destroyApp(true);
  notifyDestroyed();
 }
}

/*--------------------------------------------------
* Class Translate
*
* Draw image using translated coordinates
*-------------------------------------------------*/
class TranslateCanvas extends Canvas implements CommandListener
{
 private Command cmExit; // Exit midlet
 private Translate midlet;
 private Image im = null;
 private int translatex = 0, translatey = 0;
 public TranslateCanvas(Translate midlet)
 {
  this.midlet = midlet;
  // Create exit command & listen for events
  cmExit = new Command("Exit", Command.EXIT, 1);
  addCommand(cmExit);
  setCommandListener(this);

  try
  {
   // Create immutable image
   im = Image.createImage("/bolt.png");
  }
  catch (java.io.IOException e)
  {
   System.err.println("Unable to locate or read .png file");
  }  
 } 

 protected void paint(Graphics g)
 {
  if (im != null)
  {
   // Clear the background
   g.setColor(255, 255, 255);
   g.fillRect(0, 0, getWidth(), getHeight());
   // Translate coordinates
   g.translate(translatex, translatey);   
   // Always draw at 0,0
   g.drawImage(im, 0, 0, Graphics.LEFT Graphics.TOP);
  }
 }

 public void commandAction(Command c, Displayable d)
 {
  if (c == cmExit)
   midlet.exitMIDlet();
 }
 protected void keyPressed(int keyCode)
 {
  switch (getGameAction(keyCode))
  {
   case UP: 
    // If scrolling off the top, roll around to bottom
    if (translatey - im.getHeight() < 0)
     translatey = getHeight() - im.getHeight();
    else
     translatey -= im.getHeight();     
    break;
   case DOWN:

    // If scrolling off the bottom, roll around to top
    if ((translatey + im.getHeight() + im.getHeight()) > getHeight())
     translatey = 0;
    else
     translatey += im.getHeight();     
    break;
   case LEFT:
    // If scrolling off the left, bring around to right
    if (translatex - im.getWidth() < 0)
     translatex = getWidth() - im.getWidth();
    else
     translatex -= im.getWidth();     
    break;

   case RIGHT:
    // If scrolling off the right, bring around to left
    if ((translatex + im.getWidth() + translatex) > getWidth())
     translatex = 0;
    else
     translatex += im.getWidth();     
    break;
  }    
  repaint();
 }
}


(出处:http://www.cncms.com)


Tags:绘画 操作 坐标

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接