📄 ballcanvas.java
字号:
package com.j2medev.chapter7;
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
public class BallCanvas extends Canvas implements Runnable {
private BallMIDlet midlet = null;
private Image ball = null;
private Player wavPlayer = null;
private Player midiPlayer = null;
//定义是否支持混音
private boolean mixed = false;
private int x ,y;
private int dx = 4,dy = 3;
private boolean stop = false;
public static final int delay = 100;
public BallCanvas(BallMIDlet _midlet) {
super();
this.midlet = _midlet;
try{
ball = Image.createImage("/ball.png");
}catch(IOException ex){
ex.printStackTrace();
}
x = getWidth()/2;
y = getHeight()/2;
}
//球不停的运动,不停的绘画屏幕
public void paint(Graphics g){
int color = g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
if(ball != null){
g.drawImage(ball,x,y,Graphics.HCENTER|Graphics.VCENTER);
}
}
public void run(){
if(midiPlayer == null)
createMidiPlayer();
while(!stop){
tick();
repaint();
serviceRepaints();
try {
Thread.sleep(delay);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
//更新球的位置,判断是否与屏幕相撞
private void tick(){
boolean collision = false;
if(x + ball.getWidth()/2 > getWidth() || x - ball.getWidth()/2 < 0){
dx = -dx;
collision = true;
}
if(y + ball.getHeight()/2 >getHeight() || y - ball.getHeight()/2 < 0){
dy = -dy;
collision = true;
}
//播放音效
if(collision){
if(mixed){
playWav();
}else{
playTone();
}
}
x = x + dx;
y = y + dy;
}
//释放Player,停止线程
public void release(){
stop = true;
ball = null;
if(wavPlayer != null){
wavPlayer.close();
wavPlayer = null;
}
if(midiPlayer != null){
midiPlayer.close();
midiPlayer = null;
}
}
public void setMixed(boolean flag){
this.mixed = flag;
}
//创建midi播放器,作为背景音乐播放器
private void createMidiPlayer(){
try{
InputStream is = getClass().getResourceAsStream("/scale.mid");
midiPlayer = Manager.createPlayer(is,"audio/midi");
midiPlayer.realize();
midiPlayer.setLoopCount(-1);
midiPlayer.start();
}catch(IOException ex){
ex.printStackTrace();
}catch(MediaException ex){
ex.printStackTrace();
}
}
private void playTone(){
try{
Manager.playTone(120,300,100);
}catch(MediaException ex){
ex.printStackTrace();
}
}
//创建wav播放器,播放音效
private void playWav(){
if(wavPlayer == null){
try {
InputStream is = getClass().getResourceAsStream("/bong.wav");
wavPlayer = Manager.createPlayer(is,"audio/x-wav");
wavPlayer.realize();
wavPlayer.prefetch();
} catch (IOException ex) {
ex.printStackTrace();
} catch (MediaException ex) {
ex.printStackTrace();
}
}
try {
wavPlayer.start();
} catch (MediaException ex) {
ex.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -