노트가 떨어지는 박자를 계산하기위한 노트 데이터를 담을수 있는 노트클래스를 만듭니다.
package dynamic_beat_14;
public class Beat {
private int time; // 노트 타이밍 변수
private String noteName; // 노트 종류 변수
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public String getNoteName() {
return noteName;
}
public void setNoteName(String noteName) {
this.noteName = noteName;
}
public Beat(int time, String noteName) { // 노트 타이밍과 종류 생성자
super();
this.time = time;
this.noteName = noteName;
}
}
package dynamic_beat_14;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
public class Note extends Thread {
private Image noteBasicImage = new ImageIcon(Main.class.getResource("../images/noteBasic")).getImage();
private int x, y = 580 - (1000 / Main.SLEEP_TIME * Main.NOTE_SPEED) * Main.REACH_TIME;
private String noteType;
public Note(String noteType) { // 타입별 노트 동적 변경
if(noteType.equals("S")) {
x = 228;
}
else if(noteType.equals("D")) {
x = 332;
}
else if(noteType.equals("F")) {
x = 436;
}
else if(noteType.equals("Space")) {
x = 540;
}
else if(noteType.equals("J")) {
x = 744;
}
else if(noteType.equals("K")) {
x = 848;
}
else if(noteType.equals("L")) {
x = 952;
}
this.noteType = noteType;
}
public void screenDraw(Graphics2D g) {
if(noteType.equals("Space")) {
g.drawImage(noteBasicImage, x, y, null);
}
else {
g.drawImage(noteBasicImage, x, y, null);
g.drawImage(noteBasicImage, x + 100, y, null);
}
}
public void drop( ) {
y += Main.NOTE_SPEED;
}
@Override
public void run() {
try {
while (true) {
drop();
Thread.sleep(Main.SLEEP_TIME);
}
} catch(Exception e) {
System.err.println(e.getMessage());
}
}
}
public void dropNotes() {
Beat[] beats = null;
if(titleName.equals("Again")) { // 해당곡에 할당
int startTime = 1000 - Main.REACH_TIME * 1000;
int gap = 125;
beats = new Beat[] {
new Beat(startTime, "S"),
new Beat(startTime + gap * 2, "D"), // 비트 박자 영역
new Beat(startTime + gap * 4, "S"),
new Beat(startTime + gap * 6, "F"),
};
int i = 0;
gameMusic.start();
while(i < beats.length && !isInterrupted()) {
boolean dropped = false;
if(beats[i].getTime() <= gameMusic.getTime()) {
Note note = new Note(beats[i].getNoteName());
note.start();
noteList.add(note);
i++;
dropped = true;
}
if(!dropped) {
try {
Thread.sleep(5);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
'개인프로젝트 > 리듬게임만들기' 카테고리의 다른 글
[내가 만든 프로젝트 코드 분석 | 리듬게임 만들기] 15.노트 판정 함수 (0) | 2024.02.19 |
---|---|
[내가 만든 프로젝트 코드 분석 | 리듬게임 만들기] 13.노트 이동 애니메이션 (0) | 2024.02.17 |
[내가 만든 프로젝트 코드 분석 | 리듬게임 만들기] 12.개별게임 곡 재생하기 (1) | 2024.02.16 |
[내가 만든 프로젝트 코드 분석 | 리듬게임 만들기] 11.키보드 입력 이벤트 리스너 (1) | 2024.02.15 |
[내가 만든 프로젝트 코드 분석 | 리듬게임 만들기] 10.게임화면 디자인 (1) | 2024.02.14 |