화면구성 및 인트로음악 재생하기
2019. 3. 5. 21:53ㆍGUI 리듬게임만들기
#1 기본구성하기
① 폴더 구성
② 1번과 같이 구성할때 jl1.0.1.jar은 java에서 mp3파일을 실행하기 위한 라이브러리이다.
위의 사이트에서 JLayer1.0.1을 다운로드 후에 bulid path를 통해 라이브러리 추가
#2 Main.java 에서 화면의 크기 설정, 화면생성메소드를 호출한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package dynamic_beat_3; public class Main { /*화면크기 설정 */ public static final int SCREEN_WIDTH = 1280; public static final int SCREEN_HEIGHT = 720; public static void main(String[] args) { new DynamicBeat(); // 화면을 불러오긴 클래스 호출 }//main } | cs |
#3 DynamicBeat.java => GUI화면을 구성하기 위해 JFream을 상속
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | package dynamic_beat_3; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JFrame; public class DynamicBeat extends JFrame{ // JFrame : GUI프로그램을 위해 상속 private Image screenImage; private Graphics screenGraphics; private Image introBackground; public DynamicBeat() {//생성자 생성 setTitle("Dynamic Beat"); setSize(Main.SCREEN_WIDTH,Main.SCREEN_HEIGHT);// 화면크기 설정 setResizable(false);//화면크기 변경 X setLocationRelativeTo(null); // 창의 위치를 화면의 중심으로 설정 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 창을 종료했을 때 프로그램이 종료되도록 설정 setVisible(true); //화면 표시 /*메인클래스를 위치를 기반으로 이미지를 초기화*/ introBackground = new ImageIcon(Main.class.getResource("../images/introbackground.jpg")).getImage(); /* 게임이 실행됨과 동시에 인트로뮤직이 무한반복재생*/ Music introMusic = new Music("introMusic.mp3",true); introMusic.start(); }//DynamicBeat public void paint(Graphics g) { // JFrame을 상속받은 처음에 화면을 그려주는 메소드 screenImage = createImage(Main.SCREEN_WIDTH,Main.SCREEN_HEIGHT); screenGraphics = screenImage.getGraphics(); screenDraw(screenGraphics); g.drawImage(screenImage,0,0,null); }// paint public void screenDraw(Graphics g) { g.drawImage(introBackground,0,0,null); this.repaint(); // 다시 paint메소드 호출 }//screenDraw } | cs |
#4 곡의 설정을 위한 music.java 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | package dynamic_beat_3; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import javazoom.jl.player.Player; public class Music extends Thread{ private Player player; // jl라이브러리 => mp3파일을 java에서 실행하기 위한 라이브러리 private boolean isLoop; // 현재 재생되는 음악이 무한반복될지 설정하게 될 변수 private File file; private FileInputStream fis; private BufferedInputStream bis; public Music(String name, boolean isLoop) { // 곡의 제목,무한반복여부 try { this.isLoop = isLoop; file = new File(Main.class.getResource("../music/"+name).toURI()); fis = new FileInputStream(file); //해당 음악파일을 불러온다 bis = new BufferedInputStream(fis); // 불러온 음악파일을 버퍼에 담는다 player = new Player(bis); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } }//Music public int getTime() { // 음악이 실행되는 위치 if(player == null) return 0; return player.getPosition(); }//getTime public void close() { // 음악이 어느 위치에서 실행되더라도 종료될수 있도록 isLoop = false; player.close(); this.interrupt(); //해당스레드를 종료 }//close @Override public void run() { try { do { player.play(); fis = new FileInputStream(file); //해당 음악파일을 불러온다 bis = new BufferedInputStream(fis); // 불러온 음악파일을 버퍼에 담는다 player = new Player(bis); }while(isLoop); // isLoop이 true값이라면 무한반복 }catch(Exception e) { System.out.println(e.getMessage()); //오류 메세지 전송 } } // run } | cs |