📄 imagemove.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 + -