在j2me 中移动图片

如果一张图片较大时,可能手机屏幕显示不开,这样就需要用到图片的移动了,一般在游戏开发中会用到这一部分,因为随着主角的移动,背景是需要变化滴。

没找到相关的代码,只好自己简单写了一个,代码如下:

/*
* DisplayUI.java
*
* Created on 2007年11月1日, 上午10:40
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package com.dcsoft.mobile.dt.ui;

import com.hf.mobile.util.img.IMGTranslate;
import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/**
*
* @author Administrator
*/
public class DisplayUI extends Canvas{
private int screenWidth = 0;//画布的宽度
private int screenHeight = 0;//画布的高度
private int x=0;
private int y = 0;
private Image img = null;
private Command exitCommand = new Command("返回",Command.OK,0);
public static int leftInscreaseValue = 50;

/** Creates a new instance of DisplayUI */
public DisplayUI() {
// System.out.println("在MyCanvas()方法中");
screenWidth = this.getWidth();
screenHeight = getHeight();
this.addCommand(exitCommand);
try {
img = Image.createImage("/img/test.png");

} catch (IOException ex) {
ex.printStackTrace();
}
}

public void paint(Graphics g) {
System.out.println("inpaint");
int color = g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,screenWidth,screenHeight);
g.setColor(color);

//Image im= new IMGTranslate().transImage(img,width,height);
g.drawImage(img,x,y,Graphics.LEFT|Graphics.TOP);

}
private void seeRight(){
/*当前图片的宽度*/
int imgWidth = img.getWidth();

/*屏幕画图片的起始位置*/
// System.out.println("x0:"+x);
/*每次图片移动的像素数*/
int move = leftInscreaseValue;

int absX=Math.abs(x);
/*首先判断向右是否还可以移动*/
if(imgWidth-absX-screenWidth>0){
//System.out.println("x1:"+x);
/*计算这次需要移动的像素数*/
if(imgWidth-absX-screenWidth<leftInscreaseValue){
move=imgWidth-absX-screenWidth;

// System.out.println("x2:"+x);

}
/*重新绘制*/
x=x-move;
repaint();
}

}

private void seeLeft(){

/*当前图片的宽度*/
int imgWidth = img.getWidth();
// System.out.println("x:"+x);
/*每次图片移动的像素数*/
int move = leftInscreaseValue;

int absX=Math.abs(x);
/*首先判断当前向左是否可以移动*/
if(absX>0){
/*计算这次需要移动的像素数*/
if(absX<leftInscreaseValue){
x=0;
}
else{
x+=leftInscreaseValue;
}
repaint();
}

}
private void seeUP(){
/*当前图片的宽度*/
int imgHeight = img.getHeight();
//System.out.println("x:"+y);
/*每次图片移动的像素数*/
int move = leftInscreaseValue;

int absY=Math.abs(y);
/*首先判断当前向左是否可以移动*/
if(absY>0){
/*计算这次需要移动的像素数*/
if(absY<leftInscreaseValue){
y=0;
}
else{
y+=leftInscreaseValue;
}
repaint();
}


}
private void seeDown(){
/*当前图片的宽度*/
int imgHeight = img.getHeight();

/*屏幕画图片的起始位置*/

/*每次图片移动的像素数*/
int move = leftInscreaseValue;

int absY=Math.abs(y);
/*首先判断向右是否还可以移动*/
if(imgHeight-absY-screenHeight>0){
// System.out.println("y1:"+y);
/*计算这次需要移动的像素数*/
if(imgHeight-absY-screenHeight<leftInscreaseValue){
move=imgHeight-absY-screenHeight;

// System.out.println("x2:"+y);

}
/*重新绘制*/
y=y-move;
repaint();
}

}
public void keyPressed(int ckeyCode){
int code = getGameAction( ckeyCode);
System.out.println(ckeyCode);
if(code==this.RIGHT ){
seeRight();
}
if(code==this.LEFT ){
seeLeft();
}
if(code==this.UP ){
seeUP();
}
if(code==this.DOWN ){
seeDown();
}





}

//当Canvas显示到当前屏幕的时候此方法自动被调用
public void showNotify(){

}
//当Canvas从当前屏幕删除的时候此方法被调用
public void hideNotify(){

}
public Command getExitCommand(){
return exitCommand;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值