📄 workcanvas.java
字号:
import java.io.InputStream;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.PlayerListener;
/**
* @author XiaYaoxing Email: xia198507@126.com
*
*/
public class WorkCanvas extends Canvas implements Runnable,PlayerListener{
public WorkMIDlet midlet;
/**坦克图片*/
public Image imgTitle;
/**声音数组*/
public Player[] sounds;
/**声音索引*/
public int soundIndex;
/**场景索引*/
public int frameIndex;
/**坦克图片的位置X*/
public int tankPosX;
/**坦克图片的位置Y*/
public int tankPosY;
/**屏幕宽度*/
public int width;
/**屏幕高度*/
public int height;
/**图片宽度*/
public int imgWidth;
/**图片高度*/
public int imgHeight;
/**返回命令*/
public Command commReturn;
Font font = Pub.FONT_LARGE;
int fontHeight = font.getHeight();
public WorkCanvas(WorkMIDlet midlet){
setFullScreenMode(true); //设置全屏显示
this.midlet = midlet;
width = getWidth();
// height = 320;
height = getHeight();
sounds = new Player[2];
loadResource(); //加载资源
imgWidth = imgTitle.getWidth();
imgHeight = imgTitle.getHeight();
tankPosX = width - imgWidth >> 1; //图片的初始位置
tankPosY = height - imgHeight >> 1;
speed = 10;
new Thread(this).start();
}
/**
* 加载资源
*/
private void loadResource() {
String[] rscMid = {"/newWS.mid","/sheDiao.mid"};
InputStream is = null;
try {
if (imgTitle == null) {
imgTitle = MyUtil.getImage("/title.jpg");
System.out.println("/title.jpg");
}
for(int i = 0; i < sounds.length; ++i){
// if(sounds[i] == null){ //声音播放一次后不为空,但是已经不能播放
is = getClass().getResourceAsStream(rscMid[i]);
sounds[i] = Manager.createPlayer(is,"audio/midi"); //创建声音资源
sounds[i].addPlayerListener(this); //注册声音事件监听
// }
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void paint(Graphics g) {
g.setColor(0xffffff);
g.fillRect(0,0,width,height);
g.setFont(font);
switch(frameIndex){
case 0:
g.drawImage(imgTitle,tankPosX,tankPosY,0);
break;
case 1:
drawOption(g); //绘制声音选项
break;
}
g.setColor(0);
g.drawString("返回",width - font.stringWidth("返回"),height - fontHeight,0);
}
// /**是否正在运动*/
// private boolean moving;
/**按键处理*/
public void keyPressed(int keyCode){
switch(frameIndex){
case(0):
switch(keyCode){
case Pub.KEY_UP:
direction = UP; //按方向键时改变图片运动方向
break;
case Pub.KEY_DOWN:
direction = DOWN;
break;
case Pub.KEY_LEFT:
direction = LEFT;
break;
case Pub.KEY_RIGHT:
direction = RIGHT;
break;
case Pub.SOFT_KEY_RIGHT:
midlet.setCanvas(new SelectCanvas(midlet)); //返回
break;
// case Pub.KEY_FIRE:
// moving = !moving; //按开火键 暂停/恢复 运动
// System.out.println("moving = " + moving);
// break;
}
break;
case(1):
switch(keyCode){
case Pub.KEY_UP:
case Pub.KEY_DOWN:
case Pub.KEY_LEFT:
case Pub.KEY_RIGHT:
soundIndex = soundIndex == 0 ? 1 : 0;
break;
case Pub.KEY_FIRE:
try {
sounds[soundIndex].start();
loadResource(); //注意,声音播放完一次后必须再加载资源才能播放第二次
System.gc();
// midlet.setCanvas(new SelectCanvas(midlet));
} catch (MediaException e) {
e.printStackTrace();
}
break;
case Pub.SOFT_KEY_RIGHT:
midlet.setCanvas(new SelectCanvas(midlet)); //返回
break;
}
break;
}
repaint();
serviceRepaints();
}
/**
* 绘制声音选项
*/
private void drawOption(Graphics g) {
int optionWidth = font.stringWidth("声音1");
int optionX = width - optionWidth >> 1; //选项的X坐标
String[] options = {"声音1","声音2"};
int length = options.length;
g.setColor(0);
for(int i = 0;i < length;i ++){
if(i == soundIndex){ //如果当前选项被选中,则显示红色
g.setColor(0xff0000);
}
g.drawString(options[i],optionX,100 + (fontHeight + 5) * i,0);
g.setColor(0);
}
}
/**是否已经退出*/
public boolean running = true;
/**坦克移动的方向*/
public int direction;
/**图片运动速度*/
public int speed;
public void run() {
long temp;
while(running){
temp = System.currentTimeMillis();
switch(direction){
case UP:
tankPosY -= speed;
if(tankPosY <= 0){
direction = DOWN;
}
break;
case DOWN:
tankPosY += speed;
if(tankPosY + imgHeight + speed >= height){
direction = UP;
}
break;
case LEFT:
tankPosX -= speed;
if(tankPosX <= 0){
direction = RIGHT;
}
break;
case RIGHT:
tankPosX += speed;
if(tankPosX + imgWidth >= width){
direction = LEFT;
}
break;
}
try {
Thread.sleep(100 - (System.currentTimeMillis() - temp));
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
serviceRepaints();
}
}
/**设置场景*/
public void setFrame(int frame){
frameIndex = frame;
}
/**监听播放器发生的事件*/
public void playerUpdate(Player p, String event, Object arg2) {
System.out.println("有声音事件发生");
if(PlayerListener.END_OF_MEDIA.equals(event)){
System.out.println("声音播放完毕");
midlet.setCanvas(new SelectCanvas(midlet));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -