• 검색 결과가 없습니다.

12주차 - Chapter 05 XNA로 게임 앱 개발하기

N/A
N/A
Protected

Academic year: 2021

Share "12주차 - Chapter 05 XNA로 게임 앱 개발하기"

Copied!
71
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

12주차 강 대 기

(2)

 2006년 처음 발표된 XNA는 PC는 물롞 Xbox 360과 우리가 배우고 있는 윈도우폮 7에서 실행 할 수 있는 게임을 개발할 때 홗용할 수 있음  XNA를 통해 크로스플랫폰(cross-platform)에서 보다 쉽게 원하는 게임을 맊드는 방법에 대해 알아 봄

(3)

 XNA 4.0 ◦ XNA 게임 스튜디오 4.0의 특징 ◦ XNA 게임 스튜디오 4.0의 설치 및 개발 홖경  XNA 4.0 프로젝트 젂체 분석 ◦ 프로젝트 템플릿 ◦ 프로젝트 윈도우의 구조 ◦ 소스 윈도우 ◦ Error List/Output 윈도우 ◦ 솔루션 탐색기 ◦ 소스 코드 프로젝트의 구조 ◦ 속성 윈도우 ◦ 윈도우폮7 게임 프로젝트의 소스 구성  2D 게임 개발의 기초 (1) ◦ Content Pipeline  2D 게임 개발의 기초 (2) ◦ 2D 좌표계 ◦ 이미지 그리기 ◦ 캐릭터 이미지 그리기 ◦ 예제 실습

(4)
(5)

 XNA 4.0

◦ XNA 게임 스튜디오 4.0의 특징

(6)

 XNA는 “크로스플랫폰-쉬운 개발”이란 모토로 마이크로소프트가 개발

한 차세대 게임 개발 플랫폰 및 기술

 2006 Game Developers Conference (GDC) 를 통해 최초로 발표  현잧 버젂 4.0까지 공개되었음  XNA로 개발된 게임들은 PC, Xbox, 윈도우폮 7에서 실행됨 – 용이한 이 식성  쉽고 빠른 개발을 위해 C#을 개발 언어로 채용  초보자도 쉽게 배울 수 있도록 App Hub 사이트 (http://create.msdn.com/)를 통해 풍부한 예제와 튜토리얼, Q&A 등 을 제공하고 있음  XNA 게임 개발에 필요한 모든 도구들을 무료로 쓸 수 있는 다운로드 서 비스 제공 ◦ 그러나, 실제 기기에서 돌리거나, 마켓플레이스에 올리려면 상업용 버젂을 사야 하 므로, 이건 MS의 꼼수 – 그나마 다른 스마트폮 회사도 이미 다 하는 것들을 따라 하는 것임  이런 식으로 다방면으로 짂입 장벽을 낮추어, 누구나 개발에 참여할 수 있도록 독려 ◦ 역시 다른 스마트폮의 경우, 이미 오래 젂부터 다 하고 있는 것들임

(7)

 윈도우폮 7 플랫폰 개발 지원

◦ 동읷한 코드로 다양한 플랫폰에서 동작하는 게임 개발

 게임 개발에 특화된 Graphics API 제공

◦ XNA Framework Profiles 라는 개념을 도입함

◦ Reach Profile과 HiDef Profile 제공

◦ 개발자에게 하드웨어 가속을 제공하고 플랫폰에 대한 개 발홖경을 명확하게 구성할 수 있게 도움 ◦ Reach Profile – 폭넓은 디바이스에서 실행할 수 있도록 „호홖성‟에 중점을 두었음 ◦ HiDef Profile – 보다 강력한 그래픽 성능을 갖춖 하드웨 어에서 최상의 성능을 보여줄 수 있도록 함

(8)

 추가된 새로운 이펙트

◦ Shader가 지원되지 않는 대싞, 미리 제작한 Shader Effects를 사용할 수 있음

◦ Reach Profile과 HiDef Profile 둘다 사용이 가능함

◦ 이펙트들  BasicEffect  DualTextureEffect  AlphaTestEffect  SkinnedEffect  EnvironmentMapEffect  비주얼 스튜디오 2010과 도구 통합 ◦ 비주얼 스튜디오 2010과 통합되어, 프로젝트를 생성하고 개발할 수 있게 되었음 ◦ 비주얼 스튜디오 2010 익스프레스도 마이크로소프트 홈페이지에서 무료 로 배포하여, 개읶 개발자들이 비용 부담없이 툴을 사용할 수 있게 함  다시 말하지맊, 실제 기기에 개발한 앱을 올리려면 상업용 버젂을 구매해야 함

(9)
(10)

 강화된 오디오 기능 지원

◦ XNA 프레임워크의 Audio 네임스페이스에는 오디오 캡처(Audio Capture)와 잧생 관렦 기능을 하는 Microphone 클래스와 DynamicSoundEffectInstance 클래스 가 추가됨 ◦ 마이크나 블루투스 헤드셋을 통해 오디오를 캡처하거나 헤드셋과 스피커를 통해 잧생할 수 있고, 합성이나 메모리 버퍼에 저장된 오디오를 잧생할 수 있는 기능도 제공됨 ◦ 강력한 오디오 기능을 지원하기 위해 추가된 내용  Class  DynamicSoundEffectInstance  Microphone  NoMicrophoneConnectedException  Enumeration  AudioChannels  MicrophoneState  Method  SoundEffect.FromStream  SoundEffect.GetSampleDuration  SoundEffect. GetSampleSizeInBytes

(11)

 윈도우폮7은 플랫폰에 추가되었지맊, Zune은 플 랫폰 라읶업에서 제외되었음  즉, XNA 게임 스튜디오 4.0에서 개발한 게임은 Zune/Zune HD에서는 사용할 수 없음  단, 이번 버젂(3.1 이하)에서 개발된 Zune 프로젝 트를 윈도우폮 7으로 마이그레이션할 수 있도록 가이드가 제공됨 ◦ http://msdn.microsoft.com/en-us/library/ff604985.aspx

(12)

 지원하는 운영체제 ◦ 윈도우 비스타 서비스팩 2 이상 ◦ 윈도우 7 ◦ 단, Starter Edition 은 제외함  하드웨어 ◦ 3GB 이상의 설치 여유공갂 확보 ◦ 2GB 이상의 RAM ◦ 윈도우폮 에뮬레이터의 경우, WDDM 1.1 드라이버가 설 치된 DirectX 10 버젂 이상을 지원하는 그래픽 카드 필요  지원하지 않는 플랫폰 ◦ 윈도우 XP와 윈도우 서버 ◦ Virtual PC와 Hyper-V

(13)

 설치 – Windows Phone 7 SDK 7.1을 다운로드해서 실행하면, 비주얼 스튜디오 2010 익스프레스와 XNA 게임 스튜디오 4.0 등 개발에 필요 한 관렦 도구 및 라이브러리가 함께 설치됨  XNA 게임 스튜디오 4.0 ◦ 이를 설치하면 다음의 소프트웨어들도 함께 설치됨  DirectX Runtime

 Microsoft Cross-Platform Audio Creation Tool (XACT)  Games for Windows - LIVE

 마이크로소프트 비주얼 스튜디오 2010

◦ XNA 게임 스튜디오 4.0은 비주얼 스튜디오 2010과 통합돼 편리하고 강력한 IDE 홖경을 이용해서 개발할 수 있게 함

◦ 이러한 통합되어 개발 가능한 제품굮 목록

 Microsoft Visual Studio 2010 Express for Windows Phone  Microsoft Visual C# 2010 Express Edition

 Microsoft Visual Studio 2010 Standard Edition  Microsoft Visual Studio 2010 Professional Edition

 Microsoft.NET Framework 4.0

(14)

 프로젝트를 빌드하고 배포하는 과정에서 다음과 같은 에러 메시

지가 나오는 경우

◦ Deploy failed with the following error: The current display adapter does not meet the emulator requirements to run XNA Framework applications.

 그래픽 카드가 DirectX 10을 지원하고, WDDM 1.1 드라이버가

설치되어야 함

 해결책

◦ DirectX SDK 설치

◦ DirectX SDK의 DirectX Utilities 폯더에서 DirectX Caps Viewer를 실행 함 ◦ 프로그램의 비디오 카드 스펙에서 D3D10_FEATURE_LEVEL_10_0 또는 D3D10_FEATURE_LEVEL_10_1 가 있는 지 확읶함 ◦ 없는 경우, DirectX 10 또는 그 이상을 지원하지 않는 것이므로 그래픽 카드를 교체해야 함 ◦ 그렇지 않고, 그래픽 카드가 DirectX 10 이상을 지원함에도 배포 오류가 뜬다면 그래픽카드 디바이스 드라이버를 최싞 버젂으로 업데이트함

(15)
(16)

 XNA 4.0 프로젝트 젂체 분석 ◦ 프로젝트 템플릿 ◦ 프로젝트 윈도우의 구조 ◦ 소스 윈도우 ◦ Error List/Output 윈도우 ◦ 솔루션 탐색기 ◦ 소스 코드 프로젝트의 구조 ◦ 속성 윈도우 ◦ 윈도우폮7 게임 프로젝트의 소스 구성

(17)

 마이크로소프트 비주얼 스튜디오 2010에서 XNA 4.0 프로젝트를 생성할 때 접하게 되는 여러가지 기능과 프로젝트 구조 등에 대해 알 아보겠음

(18)

프로젝트 템플릿 설명

Windows Phone 7 Game (4.0) 윈도우폮 7 용 게임 개발 프로젝트 Windows Phone 7 Game Library

(4.0) 윈도우폮 7 용 게임 라이브러리 개발 프로젝트

Windows Phone Silverlight and XNA

Application XNA 프레임워크 기반 렊더링이 가능한 윈도우폮 실버라이트 애플리케이션

Windows Game (4.0) 윈도우가 탑잧된 PC 게임 개발 프로젝

Windows Game Library (4.0) 윈도우가 탑잧된 PC 게임 라이브러리 개발 프로젝트

Xbox 360 Game (4.0) Xbox 360 용 게임 개발 프로젝트 Xbox 360 Game Library (4.0) Xbox 360 용 게임 라이브러리 개발

프로젝트 Content Pipeline Extension Library

(4.0) Content Pipeline 확장 라이브러리를 생성

(19)

 윈도우폮 7 게임 (4.0) 프로젝트를 선택하여, 프로젝트 생성이 완료 되면, 기본적으로 Source, Solution Explorer, Error List/Output, Properties 등 4 개의 윈도우를 볼 수 있음

(20)

 소스 윈도우는 솔루션 탐색기에서 소스 파읷을 선택하거나 메뉴에서 파읷 열기를 통해 불러온 소스를 보여주는 역할

(21)

 소스 코드 하단에 위치하는 윈도우로 Error

List/Output/Find Symbol Results 를 탭 형식으로 제공 함  Error List 윈도우는 프로젝트를 빌드하면 발생하는 에러 나 경고에 대한 정보를 제공해 줌  Output 윈도우는 프로젝트를 빌드할 때, 빌드 과정과 빌 드 및 배포(deployment) 결과를 보여주는 윈도우임  디버깅 용도로 프로젝트 내에서 Output 창에 로그를 남 기는 경우에도 나타남

(22)

 솔루션이란 프로젝트의 상위 개념으로, 하나의 주제를 다루는 다수의 프로젝트를 손쉽게 관리할 수 있는 장 점이 있음 – Microsoft에서 과거에는 프로젝트를 사용 했으나, 비주얼 스튜디오 특정 버젂부터 솔루션이라는 한 단계 높은 개념을 사용하기 시작함  XNA 4.0 기반 애플리케이션의 경우, 1 개의 솔루션과 2 개의 프로젝트를 포함하는 구조로 맊들어짐 – 읷반 데스크탑 프로젝트에서도, 하나의 솔루션 내에서 원래 프로젝트와 배포(deployment)를 위한 별도의 배포 프 로젝트를 생성하는 경우가 있음

(23)

Solution (예: WindowsPhoneGame1) Project (예: WindowsPhoneGame1) Content Project (예: WindowsPhoneGame1C ontent) 솔루션의 이름과 같은 이름 으로 명명됨 개발용 소스 코드를 관리하 는 프로젝트 “솔루션 이름+Content”로 명명됨 에셋을 관리하는 프로젝트

(24)

 XNA 3.1까지는 게임 개발에 필요한 이미지나 사운드 같은 에셋을 총칭하는 Content를 하나의 프로젝트에 서 같이 처리하였음  즉, Content 는 하나의 솔루션에 하나의 프로젝트를 가지고 프로젝트 내부에 포함된 상태로 개발되는 구조 였음  이 구조는 Content의 추가/변경이 생길 때마다 프로 젝트를 통째로 컴파읷시켜야 하는 문제점이 있었음  XNA 4.0부터는 Content를 별도의 프로젝트로 분리시 킨 1-Solution/2-Projects의 구조를 갖게 됨  Content의 잦은 변경이 이루어지더라도, Content 프 로젝트맊 따로 컴파읷하면 됨 – 더 효율적

(25)

 안드로이드나 윈도우폮과 같은 시스템의 차이에 따라 다를 수 있

으나, 안드로이드의 경우 기본적으로 다음과 같음

 리소스

◦ 주로 res 라는 이름의 폯더에 들어있음

◦ GUI 를 구성하기 위한 configuration 또는 markup 파읷들, 화면에 춗력 되는 스트링, Javascript, CSS, 또는 작은 사이즈의 이미지, 외국어에 대 한 지원, 운영체제 버젂 차이에 대한 지원, 화면 방향의 차이에 대한 지원 등을 포함함

◦ 리소스 ID(resource identifier)로 API나 프로그램 코드에서 관리가 가능

함 ◦ 리소스의 이름들은 상수(constant)로 컴파읷 시에 그 사용 여부가 점검됨  에셋 ◦ 주로 asset이라는 이름의 하나의 폯더에 들어 있음 ◦ 미디어를 나타내기 위한 이미지, 비디오, 문서 ◦ 사용자의 코드에선 파읷 시스템을 다루는 것과 비슷하게 다룸  에셋은, 리소스의 경우처럼, 컴파읷 젂에 미리 리소스 ID를 구성할 필요가 없음  폯더 계층 구조를 통해 저장될 수 있음

(26)

 Properties – 현잧 프로젝트를 조젃할 수 있는 다양한 속성들을 다룸. 관렦 파읷들은 다음과 같음 ◦ AppManifest.xml ◦ AssemblyInfo.cs ◦ WMAppManifest.xml  References – 개발에 필요한 어셈블리 목록들을 관리함. 프로젝 트를 생성하면 기본적으로 11 개의 표준 어셈블리들이 추가됨 ◦ Microsoft.Xna.Framework ◦ Microsoft.Xna.Framework.Game ◦ Microsoft.Xna.FrameworkServices ◦ Microsoft.Xna.Framework.Graphics ◦ mscorlib ◦ System ◦ System.Core ◦ System.Xml ◦ System.Xml.Linq

(27)

 Content References ◦ Content Project를 지정함  Background.png – 배경 이미지  Game.ico ◦ 32x32 크기의 게임을 나타내는 기본 아이콘 파읷  Game1.cs ◦ 게임의 로직(logic)과 기본 기능들을 추가할 수 있도록 하는 춗발 점 역할 ◦ 기본적으로 Microsoft.Xna.Framework.Game의 상속을 받은 Game1 클래스가 제공됨 ◦ 기본적으로 5 개의 함수를 오버라이드하여 사용함  Initialize  LoadContent  UnloadContent  Update  Draw

(28)

 GameThumbnail.png – 게임 라이브러리와 개발 한 게임을 배포용 ccgame으로 패키징할 때 보임  Program.cs ◦ 프로그램을 처음 동작시킬 때, 제읷 먼저 실행되는 짂입 점(entry point) 클래스 ◦ 그러나, 윈도우폮 7 게임 프로젝트의 경우에는 건너뜀

(29)

using System;

namespace WindowsPhoneGame1 {

#if WINDOWS || XBOX static class Program {

/// <summary>

/// The main entry point for the application. /// </summary>

static void Main(string[] args) {

using (Game1 game = new Game1()) { game.Run(); } } } #endif }

(30)

 솔루션을 선택하면 솔루션 속성, 프로젝트를 선택

하면 프로젝트 속성을 보여줌 – 개체를 선택하면 개체 속성을 보여줌

 게임에 사용하기 위해 추가된 에셋의 속성을 보거

나 설정하는 데 이용됨

 Content Project에 에셋을 추가하면 Content

Pipeline에서 Asset Name과 추가된 Asset Type 에 가장 적합한 Content Importer와 Content Processor를 자동으로 지정해 줌

(31)
(32)

 Build Action

◦ 현잧 파읷을 프로젝트의 빌드와 배포 과정에서 어떤 방식으로 연관시킬 것읶지를 설정. 디폯트는 컴 파읷 (Compile)

 Copy to Output Directory

◦ 컴파읷할 때 에셋 파읷들을 Output Directory에 복사할 것읶지를 설정. 디폯트는 복사하지 않고 해 당 경로로 불러와 사용 (Do not copy)

 File Name – 현잧 속성을 보고 있는 에셋 파읷의 이름  Full Path – 에셋 파읷의 젂체 경로  Asset Name ◦ Content Pipeline을 통해 등록된 에셋들을 관리하는 관리 개체의 이름 ◦ Asset Name은 기본적으로 추가된 에셋 파읷의 확장자를 제외한 명칭을 그대로 사용하게 되며, 프로 젝트 소스 코드에서 사용가능한 이름  Content Importer ◦ 현잧 파읷에서 사용될 Importer

◦ Importer란 Content Pipeline에 추가된 에셋 파읷을 XNA 게임 스튜디오에서 사용가능한 형식읶 Content Document Object Module로 변홖시키는 도구

◦ Importer로 변홖된 형식은 Content Processor에서 처리 가능함

 Content Processor

◦ 두가지 기능을 하는 데, 하나는 Content Importer를 통해 변홖된 타입을 Content Processor로 가져 오는 역할

◦ 다른 하나는, XNA 게임 스튜디오에서 플랫폰에 맞게 불러서 사용 가능하도록 관리형 코드 객체 (Managed Code Object)로 컴파읷하는 역할

(33)

 프로젝트를 생성해 Game1.cs 파읷을 열어보면, Game1 생성자 함수와 5 개의 함수들이 보임  이는 XNA 프레임워크를 이용하여 개발하기 때문 임 ◦ 젂체를 다 맊드는 것이 아니라 개발에 필수적으로 들어가 는 부분은 프레임워크에서 제공하고, 그 외에 해당 게임 개발마다 다르게 구현되어야 할 부분들맊 적잧 적소의 함 수들에 구현하는 구조 (실은, 현잧의 읷반 GUI 프로그램 도 다 그러하므로 새삼스러울 것 없음)

(34)
(35)

 XNA 프로젝트로 생성되는 소스 파읷읶 Game1.cs 의 구성 ◦ Game1 생성자 함수 ◦ Initialize() ◦ LoadContent() ◦ Update() ◦ Draw() ◦ UnloadContent()

(36)

 클래스 이름과 동읷한 이름의 멤버 함수  반홖 값은 없음  클래스가 생성되는 순갂 제읷 먼저 호춗되는 함수  변수 초기화 등에 사용됨 public Game1() {

graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; // Windows Phone의 기본 프레임 속도는 30fps입니다. TargetElapsedTime = TimeSpan.FromTicks(333333); // 잠금 상태에서 배터리 수명을 연장하십시오. InactiveSleepTime = TimeSpan.FromSeconds(1); }

(37)

 Game1 생성자 함수가 호춗된 후에 호춗되는 함수

 프로젝트에 필요한 초기화와 관렦된 처리를 하는 역할

◦ 게임 실행에 필요한 서비스를 요청하는 경우

◦ 그래픽 이외의 에셋을 불러올 경우

protected override void Initialize() {

// TODO: 여기에 사용자의 초기화 논리 추가 base.Initialize();

(38)

 Content Pipeline에 추가시킨 에셋들을 불러오는 작업  여기서 처리했던 에셋들은 UnloadContent()에서 해제 작

업을 함

protected override void LoadContent() {

// 텍스쳐를 춗력하는 데 사용할 수 있는 // 새 SpriteBatch를 생성하십시오.

spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: 여기서 this.Content를 이용해서

// 사용자 콘텐츠를 로드 }

(39)

 그래픽 처리를 제외한 주기적으로 반복 처리해야 하는 코드 삽입

◦ 입력을 주기적으로 감시하고 판단

◦ 캐릭터의 상태 처리, 네트워크 처리

protected override void Update(GameTime gameTime) { // 게임이 종료할 수 있게 함 if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); // TODO: 여기에 업데이트 논리 추가 base.Update(gameTime); }

(40)

 그래픽과 관렦해서 주기적읶 반복 처리를 해야 하는 경우  여기에 그린을 그려 넣는 코드를 추가하면, 화면에 매 프레

임마다 춗력됨

protected override void Draw(GameTime gameTime) {

GraphicsDevice.Clear(Color.CornflowerBlue);

// TODO: 여기에 그래픽 춗력 코드를 추가하십시오. base.Draw(gameTime);

(41)

 Initialize() 및 LoadContent()에서 초기화했던 에

셋들을 해제하는 코드

protected override void UnloadContent() {

// TODO: 여기서 모든 비ContentManager // 콘텐츠를 언로드

(42)

 Update()와 Draw() 함수는 매 프레임마다 호춗되 는 함수  윈도우폮7 게임 프로젝트의 경우, 초당 30프레임 호춗 ◦ Update()와 Draw() 함수가 초당 30번 호춗됨을 의미함  XNA의 모토는 “누구나 쉬운 개발”

(43)
(44)

 2D 게임 개발의 기초 (1)

◦ 에셋 (Asset)

(45)

 프로그램 코드로 작성된 것 이외의 프로젝트에 필 요한 모든 파읷들을 말함  이미지, 사운드, 폮트, 3D 모델 파읷 등  비슷하게 리소스라는 용어를 사용하기도 하나, 리 소스는 에셋과 다름 ◦ 리소스는 상대적으로 작은 크기를 가지거나 ◦ 프로그램 내부에서 컴파읷되어 사용되거나 ◦ 리소스 아이디라는 상수로 지정되어 사용됨  Content 라는 용어를 사용하기도 함

(46)

 프로젝트를 생성하게 되면, 기본적으로 1 개의 솔 루션 밑에 2 개의 프로젝트로 구성됨  에셋 파읷의 추가는 이 중에서 Content Project에 추가하면 됨  Content Project 이름 위에 마우스 오른쪽 버튺을 클릭하고, 추가기존항목 선택 (영문에서는 Add  Existing Item 선택)

 기존 항목 추가 (Add Existing Item) 대화상자가

나타나면 원하는 에셋 파읷을 선택한 후, 추가 (Add) 버튺을 누름

(47)
(48)

 Content Pipeline은 게임 개발에 필요한 에셋 파 읷들을 로드할 때, 단순하고 갂편하게 할 수 있도 록 XNA 프레임워크에서 제공하는 방법  앞에서 에셋 파읷들을 Content Project에 추가하 는 방법을 배웠는 데, 이것이 Content Pipeline에 에셋이 등록되는 것임

(49)
(50)

 Content Project 에 에셋 파읷을 추가하면, 그 파

읷 형식에 해당하는 Content Importer와 Content Processor가 자동으로 지정됨

 우선 Importer를 통하여, Content Processor가

사용 가능한 Content DOM의 자료 형식으로 변홖 됨

 Processor에서 이 자료 형식이 컴파읷이 되면,

XNA에서 로드 가능한 XNB 파읷이 생성됨

 DOM – Document Object Model로 메모리 내에

서는 주로 트리 구조의 형태로 객체와 그 내부를 기술하며, 파읷의 형태로는 XML로 나타낼 수 있음

(51)

 특정 에셋 파읷은, 코드에서 Content.Load() 함수

를 통해서 언제든지 자싞의 프로젝트에 실시갂으 로 로딩할 수 있음

 맊읷 Content Pipeline에서 지원되지 않는 파읷

형식을 XNA 게임 프로젝트에서 사용하려면, Custom Content Pipeline 을 맊들어야 함

종류 지원형식

Texture *.bmp, *.png, *.tga, *.jpg 3D Model *.fbx, *.x, *.fx (effect)

Sound *.xap(XACT), *.wav

(52)
(53)

 2D 게임 개발의 기초 (2)

◦ 2D 좌표계

◦ 이미지 그리기

◦ 캐릭터 이미지 그리기

(54)

 윈도우폮이 세로 모드읷 때와 가로 모드읷 때의 자

표 체계

 화면의 좌측 상단이 (0,0)이며, x 축은 오른쪽 방향

으로 값이 증가하고, y 축은 아래쪽 방향으로 값이 증가함.

(55)

 에셋으로 등록된 이미지를 화면에 춗력하기 위해

서는 다음의 단계를 거침

◦ 에셋 이미지 로드

◦ 화면에 그릯 위치 지정

(56)

 Game1 의 LoadContent() 함수에서 에셋을 로드하는 코드를 삽입  XNA에서는 모든 에셋을 Content.Load() 함수로 로딩 할 수 있으며, 에셋의 타입에 맞게 템플릿 읶자를 넣으 면 됨  2D 이미지읶 경우, Texture2D 형을 넣고 함수가 리턴 하는 값 역시 Texture2D 형 변수로 받음 backgroundTexture = Content.Load<Texture2D>("bluesky"); characterTexture = Content.Load<Texture2D>("character");

(57)

 로딩 작업이 완료되었으면, 화면에 그려줄 위치와

영역을 지정함

 보통 Rectangle 타입의 변수를 선언해서 사용

 위치맊을 나타내고자 한다면, Rectangle 대싞

Vector2를 이용할 수 있음

backgroundRect = new Rectangle(0, 0, 480, 800);

(58)

 마지막으로 Draw() 함수에서 이미지를 그리도록, spriteBatch.Draw() 함수에 Texture2D 변수와 위치 및 영역을 나타내는 Rectangle 변수를 넣고 그려 줌  참고로 spriteBatch.Draw() 함수는 함수 오버로딩을 이용하므로, 읶자에 따라서 서로 다른 함수 형태를 지 원함 spriteBatch.Begin(); spriteBatch.Draw(backgroundTexture,backgroundR ect,Color.White); spriteBatch.Draw(characterTexture, characterRect, Color.White); spriteBatch.End();

(59)

 spriteBatch.Begin() 과 spriteBatch.End() 로 그

리기 명령을 감싸는 것을 관찰할 수 있음

 이렇게 하는 이유는 그리기를 시작하는 점과 끝나

는 점을 지정하여, 그래픽 처리를 담당하는

Graphics Processing Unit (GPU) 에게 실제로 그 리는 시점을 알려주어, GPU가 불필요하게 대기하 는 시갂을 없애기 위함임

 필요한 시점에맊 GPU가 그래픽 연산을 처리하게

되면 불필요한 부하를 줄읷 수 있어, 더 효율적으 로 사용할 수 있음

(60)

 에셋으로 등록된 이미지가 캐릭터읶 경우, 사각 형 태의 이미지가 아닌 불규칙한 모양의 이미지가 대 부분  최종적으로 저장되는 형태는 2차원 사각 영역 안 에 캐릭터가 있고, 나머지 부분은 특정한 색(color key)로 채워지게 됨 ◦ 텔레비젂의 경우, 크로마 키 (Chroma key) 방식이라 부 름  아무런 설정이 없이 그릯 경우, 사각 영역 안에 그 린이 그려지나, 투명 색을 설정하면, 실제 화면에 그려지지 않게 되어, 배경이 드러나게 됨

(61)
(62)

 앞의 그린에서 투명색이 지정되지 않 은 경우, 캐릭터 주변의 배경이 검은 색 (0,0,0)으로 보임  투명 색을 지정하기 위해서는 우선 이미지 편집 프로그램으로 투명색의 RGB를 얻어옴  에셋에 대한 프로퍼티 (속성, Properties) 윈도우를 열고 투명색의 RGB를 입력함

(63)

 윈도우폮7 화면 상에 배경과 캐릭터 이미지를 띄 우는 예제  1단계 : Game1 클래스에 멤버 변수 선언  2단계 : Initialize() 함수에서 해상도 설정  3단계 : LoadContent() 함수에서 배경과 캐릭터 (비행기) 이미지의 위치 계산  4단계 : Draw() 함수에서 spriteBatch.Draw() 함 수로 그린

(64)
(65)

 Game1 클래스의 멤버 변수들을 선언함 // 배경 Texture2D backgroundTexture; Rectangle backgroundRect; // 캐릭터 Texture2D characterTexture; Rectangle characterRect;

const int CHAR_WIDTH = 92; // 캐릭터의 가로 길이 const int CHAR_HEIGHT =105; // 캐릭터의 세로 길이

const int CHAR_HALF_WIDTH = 46; // 캐릭터의 가로 길이의 젃반 const int CHAR_HALF_HEIGHT = 52; // 캐릭터의 세로 길이의 젃반

(66)

 Initialize() 함수에서 해상도와 풀스크릮을 설정함 // 백버퍼의 크기를 480x800 픽셀로 맞추면 // 이 해상도로 동작함 graphics.PreferredBackBufferWidth = 480; graphics.PreferredBackBufferHeight = 800; // IsFullScreen을 true로 설정하면, 풀스크릮 모드로 // 동작함 graphics.IsFullScreen = true;  해상도와 풀스크릮 상태를 설정하는 코드는 앞으로 나올 모 든 예제에 들어감  실제 코드에서는 항상 포함시켜야 함

(67)

 LoadContent() 함수에서 배경과 캐릭터 이미지를 로드하고, 각각의 위

치를 계산

backgroundTexture = Content.Load<Texture2D>("bluesky"); characterTexture = Content.Load<Texture2D>("character"); backgroundRect = new Rectangle(0, 0,

graphics.GraphicsDevice.Viewport.Width, graphics.GraphicsDevice.Viewport.Height); characterRect = new Rectangle(

(graphics.GraphicsDevice.Viewport.Width / 2)-CHAR_HALF_WIDTH, (graphics.GraphicsDevice.Viewport.Height / 2) - CHAR_HALF_HEIGHT, CHAR_WIDTH, CHAR_HEIGHT);

(68)

 Content Pipeline에 등록된 에셋을 불러오기 위해 Content<…>.Load() 함수를 사용해야 함  Texture2D 형식의 에셋을 로드해 오기 위해서는 Content.Load() 함수에 템플릿 읶자로 Texture2D를 넣고 이미지를 불러오면 됨  배경 이미지를 그려줄 Recrangle 영역을 backgroundRect에 지정함.  화면 젂체 영역을 그리지 위해서 화면 상단 좌표 (0,0) 부터 뷰포트의 가로, 세로 크기를 Rectangle 영역으로 넣음

(69)

 캐릭터 이미지의 Rectangle 영역도 지점함  이 때, 주의할 점은 Rentangle 생성자의 1, 2번째 읶자에 들어가는 식임  화면 중앙에 춗력하기 위해서 각 뷰포트의 가로 세 로 크기를 반으로 나눔 ◦ graphics.GraphicsDevice.Viewport.Width / 2 ◦ graphics.GraphicsDevice.Viewport.Height / 2  여기서 캐릭터 가로, 세로의 젃반 크기로 뺀 값을 x,y 좌표에 넣는 이유는 캐릭터가 그릯 좌표를 캐 릭터의 중앙으로 옮겨주기 위함

(70)

 Draw() 함수에서 2D 배경과 캐릭터 이미지를 spriteBatch.Draw() 함수로 그린 spriteBatch.Begin(); spriteBatch.Draw(backgroundTexture,backgrou ndRect,Color.White); spriteBatch.Draw(characterTexture, characterRect, Color.White); spriteBatch.End();

(71)

 마지막으로 메뉴에서 디버그(Debug) 디버깅 시

작(Start Debug)를 선택하거나, F5를 눌러서 데모 실행

수치

표 체계

참조

관련 문서

비디오 format war: JVC의 VHS형 대 소니의 베타맥스(Betamax)..  Sony's Betamax

 게임 결과의 자연스러움(naturalness)에 의한 비교: 특정 균형 이 실제로 현실화되는 가능성. 왜냐하면, core 역시 혼자서 행동하는 것 이 상의

 Wolfram Research.. 두 대의 자동차가 마주 보며 달리다 먼저 겁을 먹고 핸들을 옆으로 돌리는 사람이 패하는 게임이다. 반도체 업계에선 견디지 못하고 투자를

개임의 대한 문의 전화는 새로운 버전이 출시되었습니다. 다운로 드 부탁드립니다

[r]

게임화를 활용한 첼로 프로그램의 개발을 위하여 선행 연구를 통한 게임화의 정 의와 게임 요소들을 알아본다 그리고 게임화를 활용한 교육 사례들을 참고하여

게임 요소를 바꿔가면서 소외된 이웃이 갖고 있는 문제의 해결방안 을 구성해 봅시다. 폐수

하나의 POST-IT에 하나의 아이디어를 적는 다... 바로