도스시절 이후로 프로그램 짜본적도 없다가 뒤늦게야 건드려보고 있답니다.
C# 이라는 녀석이 나와서 한번 보고 있답니다.
때마침 눈길을 끌었던 것은 C# 을 이용한 게임 라이브 러리인 XNA 라는 녀석입니다. 무려 XBOX 용 게임도 만들수 있다고 합니다.
바로 3D 시작하기는 힘들거 같고, 일단 2D 부터 시작해 보았습니다.
설치 방법이라거나 제품 등록 방법은 인터넷에 많으니 참고하여 설치 하시기 바랍니다.
1) 2D 이미지 띄우기!
먼저 필요한 것은 띄울 이미지 입니다. 아무 그림이나 한장 준비 하신 후에 생성된 프로젝트 내부의 Content 라는 폴더 내부에 이미지를 넣어줍니다.
폴더에 이미지를 복사 하였으면, 복사한 이미지를 드래그 하여, 솔루션 탐색기에 등록시킵니다. (끌어다가 놓으면 됩니다.)
솔루션 창에 등록된 비트맵 이미지의 속성 보기를 하면, 이미지가 지닌 속성을 알수 있습니다. 원한다면 투명컬러 값을 지정하여 투명컬러를 바로 뺄수도 있습니다.
이미지를 띄우기 위해서는 변수를 먼저 선언 합니다.
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
보통 시작 시에 위처럼 나옵니다.
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D testimg; <- 이 부분을 추가 해 보았습니다. testimg 라는 부분에 2D 이미지를 넣게 됩니다.
다음은 이미지를 testimg 에 넣어줍니다. 이 것은 LoadContent() 함수 내에서 진행 됩니다.
protected override void LoadContent() <- 바로 이 부분입니다. 컨텐츠를 로드하겠다는 곳입니다.
좀 전에 선언한 변수 명이 testimg 입니다. 그렇다면, testimg 에 Content.Load 를사용하여 추가된 이미지의 이름을 넣어줍니다. 참고로 제가 추가한 이미지는 prini.bmp 파일이기에, prini 라는 이름을 적어 넣었습니다.
testimg = Content.Load<Texture2D>("prini"); <- 제가 사용한 2D 이미지 로드 입니다. 여기서 Texture2D 는 변수의 형식 입니다. 2D 텍스처인 것이죠
변수명 = Content.Load<변수형식>("사용할 컨텐츠 네임");
이제 화면에 출력을 합니다.. 변수를 선언하고 , 해당 변수에 이미지를 로드 하였으니 출력이 남은것이겠죠...
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue); <- 그래픽 디바이스가 현재 Clear 라는 함수로 계속해서 지워지고 있습니다. CornflowerBlue 라는 컬러로 채우고 있는데, 이 부분의 색상을 바꿔주면 바탕화면 색상이 변경됩니다.
spriteBatch.Begin();
spriteBatch.Draw(변수명, 출력위치, 색상);
spriteBatch.End();
라는 코드를 사용하여 출력을 해 줍니다.
변수명은 testimg 이고, 출력 위치는 우선 2차원 좌표인지라, vector2를 사용하여, 0,0 좌표인 zero 에 찍어줍니다. 색상은 일단 White 로 하겠습니다.
spriteBatch.Begin();
spriteBatch.Draw(testimg, Vector2.Zero, Color.White);
spriteBatch.End();
위와 같은 함수가 나옵니다.
spriteBatch <- 2D이미지를 출력해주는 역할을 합니다.
여기서 문제입니다. 출력 위치인 vector2 명령의 부분에 zero 로 되어서 0,0 에 들어가게 되지만, 이 부분의 값을 변경을 준다면, 이미지가 움직이게 되겠지요?
일단 vector2 에 변수를 선언해 주고, 키보드의 값을 받아서 변경되게 합니다.
Vector2 imgposition; //이미지좀 움직여 보기 위해 맨 위에 변수 선언을 해 주었습니다.
이제 update()함수로 가서 작업을 해야 하는데, 현재의 키보드의 상태를 가져오고, 각 키별로 동작될 것을 정해주게 됩니다.
KeyboardState currentKeyState = Keyboard.GetState(); //현재의 키보드 상태를 가져오는 부분입니다.
float move = 10*(float)gameTime.ElapsedGameTime.TotalMilliseconds / 1000.0f; //초당 10픽셀씩 이동된다.는 부분
if (currentKeyState.IsKeyDown(Keys.Right)) //키 보드의 오른쪽 이동 버튼을 누르고 있으면
imgposition.X += move; //X축으로 값을 증가시킵니다.
if (currentKeyState.IsKeyDown(Keys.Left))
imgposition.X -= move;
if (currentKeyState.IsKeyDown(Keys.Up))
imgposition.Y -= move;
if (currentKeyState.IsKeyDown(Keys.Down))
imgposition.Y += move;
나머지는 마찬가지로 빼거나 Y축으로 이동시키거나 하며 2차원 적인 움직임이 되도록 한 부분입니다.
spriteBatch.Draw(testimg, imgposition, Color.White); //마지막 부분에 이미지를 찍어줄 때에, imgposition 이라고 정해준 변수를 vector2 대신 적어줍니다.
키 입력을 받아서 이동 하는 부분까지 되었습니다.
해당 자료는
http://blog.naver.com/bt2103?Redirect=Log&logNo=90035683679 이 블로그의 내용을 보며 공부하고 있습니다.
미스터백 님의xna 슈팅을 보며 기초 공부 중입니다.(_ _)
본 블로그는 지극히 개인 적인 블로그 임으로,제가 공부 하거나 여기저기서 긁어 모은 자료들도 올라갈 수 있습니다.