개인 자료란 (JE)

  서버 커뮤니티

Profile 윈초 디벨로퍼 인증 개발자

wincho_ 8ff851e059fb4dd59be0b55d44f8149f

Profile

커뮤니티 소통 개발하기 프로그래밍

[게임개발로 시작하는 자바 EP. 7] 렌더러 만들기

2022.05.24 조회 수 1397 추천 수 0

이전 글: EP. 6 - 게임 루프 제작하기

다음 글: EP. 8 - 사진 렌더링하기


일단 머리부터 박고 시작하겠스ㅂㄴㅣ다


| Step 1. JFrame에 낙서하기

낙서지만 아주 중요한 부분입니다.


저번 강의에서 작성한 render 메서드로 가봅시다.

이곳에 도형을 렌더링하는 코드를 작성해봅시다!


먼저 render 클래스에서 접근할수있는 JFrame이 필요합니다.

Main 클래스에

이부분에서 인자로 frame을 넣어줍시다.


Game 클래스에서는 생성자를 만들어줍니다.


렌더링을 하기 전, 자바에서는 BufferStrategy라는 기능을 사용합니다.

BufferStrategy 클래스는 특정의 Canvas 또는 Window 상의 복잡한 메모리를 편성하는 메커니즘을 나타내...지만 아무도 관심을 가지지 않을듯하니 넘어갑시ㄷㅏ


우리가 만든 창의 BufferStrategy를 가져옵니다.


만약 아직 BufferStrategy가 만들어지지 않았다면 (BufferStrategy가 null이라면) BufferStrategy를 만들어주고 이번 렌더는 무시합니다.


BufferStrategy에서 그릴수 있는 공간을 가져옵니다.


그리기를 완료합니다


BufferStrategy에 데이터를 화면에 표시합니다.


graphics.dispose()와 graphics를 선언하는 부분 사이에 렌더링 코드를 작성해줍니다.


먼저 배경을 흰색으로 채워주겠습니다.

(x,y) 는 왼쪽 위 모서리를 말하고 width는 가로, height는 세로 길이를 말합니다!

창 전체를 채워야하니 (0,0) 부터 (width,height) 까지 사각형을 그리면 됩니다.

창의 크기를 구하는 방법은, frame.getWidth(), frame.getHeight()로 구해올수 있습니다.

실행해보면 

검정색으로 채워졌습니다.

색을 변경하려면 fillRect 전에 setColor로 색을 정해주면 됩니다.

net Color(R, G, B);로 색을 만들수 있지만, 기본으로 정의되있는 여러 색을 사용해보겠습니다.

Color.white를 사용하여 흰색 배경을 채우겠습니다.


이제 본격적으로 낙서를 시작해보겠습니다!

배경을 채우는 코드 아래에 빨간색 정사각형을 그려보겠습니다

(100,100)에 있는 한 변의 길이가 50인 정사각형


79일만에 생존신고

정올도 봐야되고 해서 못썼습니다 머리박겟습 (이라고 정올 2교시 10점받은사람이 말합니다)




4개의 댓글

JJun
2022.06.01

인텔리제이에서 본문에 있는 코드를 입력하고 실행을 시키는데 

Game game = new Game(frame)에서 error: cannot find symbol 이런 에러가 나오네요.

어떤걸 잘 못 입력한걸까요?... 아무리 찾아도 모르겠네요;;; 도와주세요... (코드에 run 부분은 제거했습니다.)


public static class Game extends Thread {
    private final JFrame frame;

    public Game(JFrame frame) {
        this.frame = frame;
    }

    public void render() {
        BufferStrategy strategy = frame.getBufferStrategy();
        if(strategy == null) {
            frame.createBufferStrategy(3);
            return;
        }

        Graphics graphics = strategy.getDrawGraphics();

        graphics.fillRect(0,0,frame.getWidth(),frame.getHeight());

        graphics.dispose();
        strategy.show();
    }
}

public static void main(String[] args) {

    Game game = new Game(frame);
    game.start();
}


윈초
2022.06.01
@JJun

https://www.koreaminecraft.net/dev_lecture/3127636

Game game = new Game(frame); 상단에 frame이라는 이름의 JFrame 클래스를 만들어주세요!

가오갤
2022.07.04

잘 보고 갑니다!!

윈초
2022.10.21

안녕하세요...?

뉴스 및 창작물
/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 5

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 4

물귀신

2024-10-06

3