⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ballcanvas.java

📁 j2me简单实例,j2me教程加源码,希望大家喜欢
💻 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 + -