화면구성 및 인트로음악 재생하기

2019. 3. 5. 21:53GUI 리듬게임만들기

#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