main programm:ScrollScreen.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ScrollScreen extends MIDlet
{
private Display dispaly=null;
public void startApp()
{
try
{
dispaly=Display.getDisplay(this);
MainCanvas gameCanvas=new MainCanvas(this);
gameCanvas.start();
dispaly.setCurrent(gameCanvas);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void exit()
{
System.gc();
destroyApp(false);
notifyDestroyed();
}
}
Next Programm:MainCanvas.java
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
//注意这extends的是GameCanvas而不是Canvas
public class MainCanvas extends GameCanvas implements Runnable, CommandListener
{
private ScrollScreen midlet = null;
private boolean isPlay;
private long delay; //线程休眠的时间间隔
private int width; // 屏幕宽度
private int height; //屏幕高度
private int scnX, scnY; //可视窗口的左上角坐标
Image backgroundImage;
private Sprite backgroundSprite;
private LayerManager layerManager;
public static final Command exitCommand = new Command("退出",Command.EXIT, 1);
public MainCanvas(ScrollScreen midlet)throws Exception
{
super(true);
this.midlet = midlet;
width = getWidth();
height = getHeight();
scnX = 55;
scnY = 20;
delay = 20;
backgroundImage = Image.createImage("/background.png");
backgroundSprite = new Sprite(backgroundImage);
layerManager = new LayerManager();
layerManager.append(backgroundSprite);
this.addCommand(exitCommand);
this.setCommandListener(this);
}
public void start()
{
isPlay=true;
Thread t =new Thread(this);
t.start();
}
public void stop()
{
isPlay=false;
}
public void run()
{
Graphics g=getGraphics();
while(isPlay==true)
{
input();
drawScreen(g);
try
{
Thread.sleep(delay);
}
catch(InterruptedException ie)
{
}
}
}
private void input()
{
int keyStates = getKeyStates();
if((keyStates&LEFT_PRESSED)!=0)
{
if(scnX-1>0)
{
scnX--;
}
}
else if ((keyStates&RIGHT_PRESSED)!=0)
{
if(scnX+1+140<backgroundImage.getWidth())
{
scnX++;
}
}
else if((keyStates&UP_PRESSED)!=0)
{
if(scnY-1>0)
{
scnY--;
}
}
else if((keyStates&DOWN_PRESSED)!=0)
{
if(scnY+1+140<backgroundImage.getHeight())
{
scnY++;
}
}
}
private void drawScreen(Graphics g)
{
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0x0000ff);
layerManager.setViewWindow(scnX,scnY,140,140);
layerManager.paint(g,20,20);
flushGraphics();
}
public void commandAction(Command command, Displayable displayable)
{
if(command==exitCommand)
{
stop();
midlet.exit();
}
}
}
import javax.microedition.lcdui.game.*;
//注意这extends的是GameCanvas而不是Canvas
public class MainCanvas extends GameCanvas implements Runnable, CommandListener
{
private ScrollScreen midlet = null;
private boolean isPlay;
private long delay; //线程休眠的时间间隔
private int width; // 屏幕宽度
private int height; //屏幕高度
private int scnX, scnY; //可视窗口的左上角坐标
Image backgroundImage;
private Sprite backgroundSprite;
private LayerManager layerManager;
public static final Command exitCommand = new Command("退出",Command.EXIT, 1);
public MainCanvas(ScrollScreen midlet)throws Exception
{
super(true);
this.midlet = midlet;
width = getWidth();
height = getHeight();
scnX = 55;
scnY = 20;
delay = 20;
backgroundImage = Image.createImage("/background.png");
backgroundSprite = new Sprite(backgroundImage);
layerManager = new LayerManager();
layerManager.append(backgroundSprite);
this.addCommand(exitCommand);
this.setCommandListener(this);
}
public void start()
{
isPlay=true;
Thread t =new Thread(this);
t.start();
}
public void stop()
{
isPlay=false;
}
public void run()
{
Graphics g=getGraphics();
while(isPlay==true)
{
input();
drawScreen(g);
try
{
Thread.sleep(delay);
}
catch(InterruptedException ie)
{
}
}
}
private void input()
{
int keyStates = getKeyStates();
if((keyStates&LEFT_PRESSED)!=0)
{
if(scnX-1>0)
{
scnX--;
}
}
else if ((keyStates&RIGHT_PRESSED)!=0)
{
if(scnX+1+140<backgroundImage.getWidth())
{
scnX++;
}
}
else if((keyStates&UP_PRESSED)!=0)
{
if(scnY-1>0)
{
scnY--;
}
}
else if((keyStates&DOWN_PRESSED)!=0)
{
if(scnY+1+140<backgroundImage.getHeight())
{
scnY++;
}
}
}
private void drawScreen(Graphics g)
{
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0x0000ff);
layerManager.setViewWindow(scnX,scnY,140,140);
layerManager.paint(g,20,20);
flushGraphics();
}
public void commandAction(Command command, Displayable displayable)
{
if(command==exitCommand)
{
stop();
midlet.exit();
}
}
}