Game Programming/XNA

XNA :: XNA Game Studio 4.0 # 4 - 레이블 (폰트) 출력

VallistA2015. 4. 20. 17:17

 

 

 

 

이번글에서는 이미지 출력에 이어서 폰트 출력을 해보도록 하겠다.

이미지 출력은 수많은 파일을 지원하지만, 폰트는 SpriteFont 단 한개만 지원한다는 단점이 있다.

물론 spriteFont라고 단점은 직접 만들어야 한다는 것 빼고는 단점이 별로 없을수도 있다.

왜냐하면 이쁘게 만들거나 파일을 다운받으면 그것을 쓸 수 있다는 점이 되어버리므로 양날의 검 이랄까?

 

이번 글에는 xna에서 SpriteFont를 만들어 출력하는 것까지 해보도록 하겠다.

 

먼저 소스코드를 보도록 하자.

 

 

무엇인가 하나 추가된 메서드가 보일텐데 자세히 보도록 하자.

 

 

SpriteFont는 폰트를 출력하는데 쓰이는 메서드이다.

말그대로 SpriteFont파일을 읽어와서 (파싱해서) 이미지를 뿌리는데 도와준다.

 

 

LoadContent 부분 안에 있는 font의 초기화 및 데이터 대입 소스인데,

이는 컨텐츠 폴더 안의 이름과 동일한 오브젝트를 가져온다.

우리가 가져올 오브젝트는 아직 생성하지 않았으므로 생성하도록 하자.

물론 필자는 위에 써잇듯 이름을 SpriteFont1으로 했다. 다른 이름으로 할 것이면, Content 폴더에 넣어두고 솔루션 탐색기의 Content에 등록 시킨후 이름을 새로 등록하도록 하자.

 

SpriteFont를 등록시키는 방법

 

<사진 1: 솔루션 탐색기>

 

 

 먼저 솔루션 탐색기를 키도록 하자.

 

 

<사진 2: 추가하는 모습>

 

그 다음 Content의 오른쪽 클릭, 추가 > 새 항목을 누른다.

 

 

<사진 3: 새 항목 창>

 

그 다음 Visual C#을 눌러서 Sprite Font 를 선택한 다음 이름을 적도록 하자.

 

그러면 성공적으로 폰트 파일이 만들어질 것이다.

이어서 렌더링 하는 부분을 보도록 하자.

 

 

이미지를 뿌리기 위해서는 SpriteBatch가 필요하다. SpriteBatch는 저번 글에서 말했듯 "도화지" 같은 역할이다.

 SpriteBatch를 선언한 spriteBatch를 이용해서 Texture2D를 뿌려주어야 한다.

 

 먼저 SpriteBatch는 수많은 함수가 있지만 그중에서 뿌리는데 필수적인 함수들은 위의 함수들이다.

 필수적인 함수들을 알아보도록 하자.

 

 - Begin

 Begin은 이 밑부터 뿌리겠다. 정도로 알아두면 되겠다.

 Begin 함수를 사용하면 여러가지 옵션을 줄 수 있는데 그 여러가지 옵션중에는 Depth, 알파블랜딩, 버퍼 효과등 수많은 기능을 사용할 수 있다.

 오버로딩된 함수를 보도록 하자.

 

 Begin()

 -> 기본적인 함수다. 아무런 기능도 없다.

 

 Begin(SpriteSortMode sortMode, BlendState blendState)

 -> SpriteSortMode와 BlendState 모드를 설정할 수 있다.

 SpriteSortMode는 Depth에 따라 Sprite의 출력 순서를 설정 해주는 변수이다.

 BlendState는 뿌려지는 효과를 설정할 수 있다. 사용하게 되면 변수에 따라서 렌더링 옵션이 달라지게 된다.


 Begin(SpriteSortMode sortMode, BlendState blendState, SamplerState samplerState, DepthStencilState depthStencilState, RasterizerState rasterizerState);

 -> 앞 2개의 인자는 동일하며 그대신 3D 옵션이 붙었다.

 DepthStencilState는 Depth 옵션을 확장한다.

 RasterizerState는 컬링 옵션을 설정하며, 최적화 하는데 사용할 수 있겠다.


 Begin(SpriteSortMode sortMode, BlendState blendState, SamplerState samplerState, DepthStencilState depthStencilState, RasterizerState rasterizerState, Effect effect);

 -> SamplerState 는 샘플러 옵션을 설정하며, 도움되는 옵션을 추가한다.

 Effect는 말그대로 효과 클래스인데 렌더링에 도움을 주는 클래스를 제공한다.


 Begin(SpriteSortMode sortMode, BlendState blendState, SamplerState samplerState, DepthStencilState depthStencilState, RasterizerState rasterizerState, Effect effect, Matrix transformMatrix);

 -> Matrix 인자가 마지막으로 붙었는데, 이 matrix 인자를 사용하여 카메라를 만들 수 있다.

 Matrix 옵션을 사용해서 SpriteBatch 자체를 옮겨버릴수도 있으며 카메라 클래스도 만들수 있다.

 

 DrawString(SpriteFont spriteFont, string text, Vector2 position, Color color);

 -> 만든 SpriteFont, 두번째 인자에는 쓸 텍스트, 좌표, 색을 넣어주면된다

 DrawString(SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color);

 -> 만든 SpriteFont, 두번째 인자에는 쓸 텍스트, 좌표, 색을 넣어주면된다


 DrawString(SpriteFont spriteFont, string text, Vector2 position, Color color, float rotation, Vector2 origin, float scale, SpriteEffects effects, float layerDepth);

 -> 만든 SpriteFont, 두번째 인자에는 쓸 텍스트, 좌표, 색, 각도, 중심점, 크기, 상하좌우 반전 옵션을 넣어주면된다


 DrawString(SpriteFont spriteFont, string text, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth);

 -> 만든 SpriteFont, 두번째 인자에는 쓸 텍스트, 좌표, 색, 각도, 중심점, 크기, 상하좌우 반전 옵션, 깊이를 넣어주면된다


 DrawString(SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color, float rotation, Vector2 origin, float scale, SpriteEffects effects, float layerDepth);

 -> 만든 SpriteFont, 두번째 인자에는 쓸 텍스트, 좌표, 색, 각도, 중심점, 크기, 상하좌우 반전 옵션, 깊이를 넣어주면된다


 DrawString(SpriteFont spriteFont, StringBuilder text, Vector2 position, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth);
 -> 만든 SpriteFont, 두번째 인자에는 쓸 텍스트, 좌표, 색, 각도, 중심점, 크기, 상하좌우 반전 옵션, 깊이를 넣어주면된다


 

 - End

 출력을 끝낸다는 의미로 알아두면 된다.

 

 이 오버로드된 함수들 중에 우리가 사용할 함수를 사용하면 된다.

댓글

VallistA

병특이 끝나서 게임에서 웹으로 스위칭한 프로그래머.
프로그래밍 정보등을 공유합니다.
현재는 이 블로그를 운영하지 않습니다.
vallista.kr 로 와주시면 감사하겠습니다!

자고 싶습니다. ㅠㅠ

Github      :: 링크

궁금한점 문의 주시면 답변드리도록 하겠습니다

VISITED

Today :

Total :

SNS

  • 페이스북아이콘
  • 카카오톡아이콘
  • 트위터아이콘

Lately Post

Lately Comment