몇 가지 게임, 2 차원, 1 3D 게임 및 1 안드로이드 애플 리케이션 (대부분 측면 프로젝트)에서 일 해왔다. Java를 통해 안드로이드 및 컴퓨터 용 게임을 구축 할 수있는 유연성으로 인해 libgdx를 좋아했지만 내가 만난 문제입니다. 게임을 .jar 또는 .apk로 내 보내면 오디오 재생을 거부합니다 ....하지만 intellij를 통해 오디오를 실행하면 오디오가 완벽하게 작동하므로 libgdx 사운드 엔진이 내보내기시에 도청 당했다고 가정합니다. 내 플랫폼에 대한 사운드 엔진과 그것은 오류를 뱉어 내 ... intellij에서 일하는 .jar 파일로 내보낼 수있는 intellij가 metainf을 빌드하지 않기 때문에 일식을 통해 게임을 내보내는 것입니다 ...
그래서 질문은 :
1) 기본 libGDX 사운드 기능으로 내보낼 수있는 비밀 방법이 있습니까? 오류를 뱉어없이 libjdx이 musicbox 코드를 작동하게 할 수있는 방법이 musicBoxlibGDX와 javax.sound가 충돌합니까? 그리고 스케일링 문제
import com.badlogic.gdx.audio.Music;
Music music;
Music music = Gdx.audio.newMusic(Gdx.files.internal("Music/TheRoadOfMoor.wav"));
music.setVolume(0.2f);
music.setLooping(true);
music.play();
boolean isPlaying = music.isPlaying();
boolean isLooping = music.isLooping();
float position = music.getPosition();
2)없이
MainClass 있습니까? musicbox
import com.charedinferno.game.audio.MusicBox;
MusicBox music;
public void create(){
music.load("Musicx/level1.mp3", "level1");
music.play("level1");
music.loop("level1", 600, MusicBox.getFrames("level1") - 2200);
}
오류와
MusicBox.java
import java.util.HashMap;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
public class MusicBox {
private static HashMap<String, Clip> clips;
private static int gap;
private static boolean mute = false;
public static void init() {
clips = new HashMap<String, Clip>();
gap = 0;
}
public static void load(String s, String n) {
if(clips.get(n) != null) return;
Clip clip;
try {
AudioInputStream ais = AudioSystem.getAudioInputStream(MusicBox.class.getResourceAsStream(s));
AudioFormat baseFormat = ais.getFormat();
AudioFormat decodeFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false);
AudioInputStream dais = AudioSystem.getAudioInputStream(decodeFormat, ais);
clip = AudioSystem.getClip();
clip.open(dais);
clips.put(n, clip);
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void play(String s) {
play(s, gap);
}
public static void play(String s, int i) {
if(mute) return;
Clip c = clips.get(s);
if(c == null) return;
if(c.isRunning()) c.stop();
c.setFramePosition(i);
while(!c.isRunning()) c.start();
}
public static void stop(String s) {
if(clips.get(s) == null) return;
if(clips.get(s).isRunning()) clips.get(s).stop();
}
public static void resume(String s) {
if(mute) return;
if(clips.get(s).isRunning()) return;
clips.get(s).start();
}
public static void loop(String s) {
loop(s, gap, gap, clips.get(s).getFrameLength() - 1);
}
public static void loop(String s, int frame) {
loop(s, frame, gap, clips.get(s).getFrameLength() - 1);
}
public static void loop(String s, int start, int end) {
loop(s, gap, start, end);
}
public static void loop(String s, int frame, int start, int end) {
stop(s);
if(mute) return;
clips.get(s).setLoopPoints(start, end);
clips.get(s).setFramePosition(frame);
clips.get(s).loop(Clip.LOOP_CONTINUOUSLY);
}
public static void setPosition(String s, int frame) {
clips.get(s).setFramePosition(frame);
}
public static int getFrames(String s) { return clips.get(s).getFrameLength(); }
public static int getPosition(String s) { return clips.get(s).getFramePosition(); }
public static void close(String s) {
stop(s);
clips.get(s).close();
}
}
MainClass.java:122 그것은 밖으로 뱉어 :
Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.game.audio.MusicBox.load(MusicBox.java:25)
at com.game.CharedInferno.show(MainClass.java:122)
at com.badlogic.gdx.Game.setScreen(Game.java:61)
at com.charedinferno.game.MainMenu$1.touchDown(MainMenu.java:101)
at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:55)
at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:182)
at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:153)
at com.badlogic.gdx.scenes.scene2d.Stage.touchDown(Stage.java:278)
at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:323)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:199)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)
3) 그리고 마지막 문제 그것은 나에게 다소 괴롭히는 것이지만 소리 만큼은 아니지만, 게임이 안드로이드에 적용될 때입니다. hing가 1920x1080으로 풀 스크린으로 표시되는 대신 확대 축소됩니다. 모든 것이 1280x720으로 고정되어있는 것처럼 수정 되었습니까? (다시 중요하지 않음)
(JukeBox.java : 25) –
yea 오르골과 쥬크 박스는 같은 클래스입니다 :/그냥 다른 게임에서 같은 소스를 복사했는데 여기에 게시하기 전에 이름을 바꾸지 않았습니다> _> 구형 게임은 같은 음원으로 이름이 지정되었습니다 ... 내가 가진 마지막 프로젝트였습니다 여기에 게시하기 전에 열어 xD – Naiakoa