본문 바로가기

개인프로젝트/리듬게임만들기

[내가 만든 프로젝트 코드 분석 | 리듬게임 만들기] 13.노트 이동 애니메이션

노트가 떨어지는 애니메이션을 구현하기 위해 노트 클래스를 만듭니다.

ArrayList<Note> noteList = new ArrayList<Note>(); // 노트 배열 생성
	
		for(int i = 0; i < noteList.size(); i++) // 노트리스트 노트 출력 
		{
			Note note = noteList.get(i);
			note.screenDraw(g);
		}
	
public void dropNotes(String titleName) { // 떨어지는 노트 메소드
		Note note = new Note(228, "Space");
		note.start();
		noteList.add(note);
		
	}
package dynamic_beat_13;

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;
	// 1초뒤에 판정 라인에 노트 이미지 위치 
	private String noteType;
	
	public Note(int x, String noteType) { // 노트 생성자
		this.x = x; // 좌표 초기화
		this.noteType = noteType;
	}
	
	public void screenDraw(Graphics2D g) { // 노트 이미지
		if(!noteType.equals("Space")) {
			g.drawImage(noteBasicImage, x, y, null);
		}
		else { // Space 노트 이미지
			g.drawImage(noteBasicImage, x, y, null);
			g.drawImage(noteBasicImage, x + 100, y, null);
		}
	}

	public void drop( ) { 
		y += Main.NOTE_SPEED; // y좌표 변경으로 떨어지는 노트 속도
	}
	
	@Override
	public void run() { // 1초에 100번 실행되는 쓰레드
		try {
			while (true) { // 무한반복
				drop();
				Thread.sleep(Main.SLEEP_TIME); // 0.01초 주기
			}
		} catch(Exception e) {
			System.err.println(e.getMessage());
		}
	}
}