在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;
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值