Commit e2cb276d authored by kingyu's avatar kingyu Committed by kingyuluk
Browse files

feat: 更换音频播放方式

BREAKING CHANGE: 使用AudioClip类的方法播放连续的短音频可能会导致线程冲突使游戏卡顿,改用sun.audio类的AudioPlayer方法播放音频
parent 4e8f8dab
package com.bird.main;
import com.bird.util.MusicUtil;
import static com.bird.util.Constant.FRAME_HEIGHT;
import static com.bird.util.Constant.FRAME_WIDTH;
import static com.bird.util.Constant.FRAME_X;
......@@ -119,7 +117,6 @@ public class GameFrame extends Frame implements Runnable {
foreground = new GameForeground();
ready = new GameReady();
bird = new Bird();
MusicUtil.load();
setGameState(STATE_READY);
// 启动用于刷新窗口的线程
......
......@@ -22,36 +22,37 @@ public class Constant {
public static final int FRAME_Y = 100;
// 图像资源路径
public static final String BG_IMG_PATH = "sources/img/background.png"; // 背景图片
public static final String BG_IMG_PATH = "resources/img/background.png"; // 背景图片
public static final int HOVER_MOVING_SCORE = 4; //出现移动管道的分数
// 小鸟图片
// 小鸟图片
public static final String[][] BIRDS_IMG_PATH = {
{ "sources/img/0.png", "sources/img/1.png", "sources/img/2.png", "sources/img/3.png", "sources/img/4.png",
"sources/img/5.png", "sources/img/6.png", "sources/img/7.png" },
{ "sources/img/up.png", "sources/img/up.png", "sources/img/up.png", "sources/img/up.png",
"sources/img/up.png", "sources/img/up.png", "sources/img/up.png", "sources/img/up.png" },
{ "sources/img/down_0.png", "sources/img/down_1.png", "sources/img/down_2.png", "sources/img/down_3.png",
"sources/img/down_4.png", "sources/img/down_5.png", "sources/img/down_6.png",
"sources/img/down_7.png" },
{ "sources/img/dead.png", "sources/img/dead.png", "sources/img/dead.png", "sources/img/dead.png",
"sources/img/dead.png", "sources/img/dead.png", "sources/img/dead.png", "sources/img/dead.png", } };
{ "resources/img/0.png", "resources/img/1.png", "resources/img/2.png", "resources/img/3.png",
"resources/img/4.png", "resources/img/5.png", "resources/img/6.png", "resources/img/7.png" },
{ "resources/img/up.png", "resources/img/up.png", "resources/img/up.png", "resources/img/up.png",
"resources/img/up.png", "resources/img/up.png", "resources/img/up.png", "resources/img/up.png" },
{ "resources/img/down_0.png", "resources/img/down_1.png", "resources/img/down_2.png",
"resources/img/down_3.png", "resources/img/down_4.png", "resources/img/down_5.png",
"resources/img/down_6.png", "resources/img/down_7.png" },
{ "resources/img/dead.png", "resources/img/dead.png", "resources/img/dead.png", "resources/img/dead.png",
"resources/img/dead.png", "resources/img/dead.png", "resources/img/dead.png",
"resources/img/dead.png", } };
// 云朵图片
public static final String[] CLOUDS_IMG_PATH = { "sources/img/cloud_0.png", "sources/img/cloud_1.png" };
public static final String[] CLOUDS_IMG_PATH = { "resources/img/cloud_0.png", "resources/img/cloud_1.png" };
// 水管图片
public static final String[] PIPE_IMG_PATH = { "sources/img/pipe.png", "sources/img/pipe_top.png",
"sources/img/pipe_bottom.png" };
public static final String[] PIPE_IMG_PATH = { "resources/img/pipe.png", "resources/img/pipe_top.png",
"resources/img/pipe_bottom.png" };
public static final String TITLE_IMG_PATH = "sources/img/title.png";
public static final String NOTICE_IMG_PATH = "sources/img/start.png";
public static final String SCORE_IMG_PATH = "sources/img/score.png";
public static final String OVER_IMG_PATH = "sources/img/over.png";
public static final String AGAIN_IMG_PATH = "sources/img/again.png";
public static final String TITLE_IMG_PATH = "resources/img/title.png";
public static final String NOTICE_IMG_PATH = "resources/img/start.png";
public static final String SCORE_IMG_PATH = "resources/img/score.png";
public static final String OVER_IMG_PATH = "resources/img/over.png";
public static final String AGAIN_IMG_PATH = "resources/img/again.png";
public static final String SCORE_FILE_PATH = "sources/score"; // 分数文件路径
public static final String SCORE_FILE_PATH = "resources/score"; // 分数文件路径
// 游戏背景色
public static final Color BG_COLOR = new Color(0x4bc4cf);
......
package com.bird.util;
import java.applet.Applet;
import java.applet.AudioClip;
import java.io.File;
import java.net.MalformedURLException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
/**
* 音乐工具类
*
*
* @author Kingyu wav音频:JDK提供的类可直接解码 mp3音频:JDK没有提供支持,需要使用第三方的工具包
*
*
*/
public class MusicUtil {
private static AudioClip fly;
private static AudioClip crash;
private static AudioClip score;
// 装载音乐资源
@SuppressWarnings("deprecation")
public static void load() {
try {
fly = Applet.newAudioClip(new File("sources/wav/fly.wav").toURL());
crash = Applet.newAudioClip(new File("sources/wav/crash.wav").toURL());
score = Applet.newAudioClip(new File("sources/wav/score.wav").toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
private static AudioStream fly;
private static AudioStream crash;
private static AudioStream score;
private static InputStream flyIn;
private static InputStream crashIn;
private static InputStream scoreIn;
//wav播放
public static void playFly() {
fly.play();
try {
// create an audiostream from the inputstream
flyIn = new FileInputStream("resources/wav/fly.wav");
fly = new AudioStream(flyIn);
} catch (FileNotFoundException fnfe) {
} catch (IOException ioe) {
}
AudioPlayer.player.start(fly);
}
public static void playCrash() {
crash.play();
try {
// create an audiostream from the inputstream
crashIn = new FileInputStream("resources/wav/crash.wav");
crash = new AudioStream(crashIn);
} catch (FileNotFoundException fnfe) {
} catch (IOException ioe) {
}
AudioPlayer.player.start(crash);
}
public static void playScore() {
score.play();
try {
// create an audiostream from the inputstream
scoreIn = new FileInputStream("resources/wav/score.wav");
score = new AudioStream(scoreIn);
} catch (FileNotFoundException fnfe) {
} catch (IOException ioe) {
}
AudioPlayer.player.start(score);
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment