java手机游戏开发 3 简单认识 midlet与canvas

 

java手机应用程序称其为midlet(sun公司的命名);

承接以上的2个包[com.sk.view],[com.sk.model]

于com.sk.view中建立类(ImgFrom),继承midlet,并实现CommandListener(具体稍后解释,先接触下)

具体代码:

package com.sk.view;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

import com.sk.model.ImgCanvas;

public class ImgForm extends MIDlet implements CommandListener{

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
   // TODO Auto-generated method stub
  
}

protected void pauseApp() {
   // TODO Auto-generated method stub
  
}

protected void startApp() throws MIDletStateChangeException {
   // TODO Auto-generated method stub

//创建 退出的命令
   Command cmd_exit=new Command("退出",Command.EXIT,1);

//创建ImgCanvas,并把Display传给ImgCanvas,   ImgCanvas canvas=new ImgCanvas(Display.getDisplay(this));
//给canvas加入 退出命令
   canvas.addCommand(cmd_exit);

//Display.getDisplay(this):获取当前midlet的Display对象

//设置canvas的命令监听器
   canvas.setCommandListener(this);
//让 canvas开始工作
   canvas.start();
}

//实现命令监听器必须实现的方法

public void commandAction(Command c, Displayable d) {
   // TODO Auto-generated method stub
if(c.getCommandType()==Command.EXIT){
   try {

//销毁应用,实质notifyDestroyed()销毁本应用程序,但destroyApp(true),最后写上,(习惯)
     destroyApp(true);
     notifyDestroyed();
    } catch (MIDletStateChangeException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
}

}

2.ImgCanvas类

package com.sk.model;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class ImgCanvas extends Canvas{

//Display属性,(计划由midlet传递过来)
private Display display;
//当前Image的序号
private int curImg=0;

//Image的名称数组
private String[] names={"瀑布","河流","湖泊","水流","激流"};
//Image数组
private Image[] imgs=null;

public ImgCanvas(Display display){
  this.display=display;
   imgs=new Image[5];
  try{
   for(int i=0;i<imgs.length;i++){

//初始化每张图片
     imgs[i]=Image.createImage("/com/sk/imgs/i"+(i+1)+".jpg");
    }
   }catch(Exception e){
    e.printStackTrace();
    System.out.println("image loading error");
   }
}
//Canvas开始工作
public void start(){

//canvas于当前手机屏幕
   display.setCurrent(this);

//重画
   repaint();
}
//响应手机按键(canvas具有的方法)
protected void keyPressed(int keyCode) {
   // TODO Auto-generated method stub

//获取当前按键
   int action=this.getGameAction(keyCode);
   //左方向键被按下
   if(action==this.LEFT){
    if(curImg>0){
     curImg--;
    }else{
     curImg=imgs.length-1;
    }

//右方向键被按下
   }else if(action==this.RIGHT){
   if(curImg<imgs.length-1){
     curImg++;
    }else{
     curImg=0;
    }
   }

//响应完毕,重画
   repaint();
}

protected void paint(Graphics g) {
   // TODO Auto-generated method stub
   //清屏(最好每次都清屏,好习惯)
   g.setColor(255,255,255);
   g.fillRect(0, 0, this.getWidth(), this.getHeight());
   //画图
   g.drawImage(imgs[curImg], getWidth()/2, getHeight()/2, Graphics.HCENTER|Graphics.VCENTER);
  
   //写标题
   Font font=Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
   g.setFont(font);
   g.setColor(255,0,0);
   g.drawString(names[curImg], getWidth()/2, 0, Graphics.HCENTER|Graphics.TOP);
  
}

}

(注意:图片资源我放置于包com.sk.imgs下),此例程共5副图片,名称i1,i2...i5

完毕后,按下 eclipse的run按钮,双击 wireless toolkit emulator ,于对话框中Project选本midlet的工程,Executable选中midlet,并选好midlet的路径,Emulation中device,选defaultColorPhone即可,最后run即可看到效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gamebox1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值