게임 점수판을 만들어 주겠습니다.
이것도 상당히 간단합니다. 전체적으로 이해만하신다면 순식간 + _ +흐흐

솔루션 창에 Fonts 라는 새폴더를 만들고 새항목 추가를 클릭하셔서
Sprite Font를 하나 만듭시다.

사용자 삽입 이미지
























제목은 위와 같이 해주시구요 ^^
만드신후 GameFont.spritefont 를 더블클릭하시면 XML이 나옵니다...뭐지...ㅎㅎ
걱정하지마시구 두가지만 설정해주시면 됩니다.
사용자 삽입 이미지








폰트네임과 크기를 설정해 주었습니다. 우리가 사용할 폰트 설정마쳤구요~이제 선언합시다.

사용자 삽입 이미지



선언부에 3가지가 추가 되었습니다. 위치에 0.1f,0.1f 이유는 아시겠죠 이제 ^^화면크기에 곱할거에욤
이제 폰트를 로드하도록 합시다.

사용자 삽입 이미지


요거 한줄 추가 되었습니다.

아 그리고 비행기 격추시 스코어 값을 더해줘야겠죠 ?

public void UpdateCannonBalls()함수에 이부분이 수정되었습니다.
사용자 삽입 이미지






1점씩 더해주시구요 이제 화면에 그리기만 하면 됩니다.^^

사용자 삽입 이미지





DrawString (
         글씨체(font),
         출력할text,
         위치,
         색지정
)
#참고 : ToString() 은 int값을 문자열로 반환합니다^^
자 이제 디버깅 해봅시다. ^^
사용자 삽입 이미지

이것으로 2D 슈팅게임 만들기가 완성되었습니다.
XNA에서 기본적으로 나오는 tutorial을 따라했습니다.
다음은 3D슈팅게임 만들기로 넘어가도록 하겠습니다.
소스 첨부 하겠습니다.^^
수고하셨습니다.



728x90

총알과 적기가 충돌하면 비행기가 사라지도록 구현하겠습니다.
간단합니다 충돌에 대한 메서드가 기본적으로 있어서-_-바로 적으면 되는군요;;

우리가 할일은 미사일영역과 비행기 영역을 설정해주고
그 두영역이 충돌시 없애주기만 하면 됩니다.
 public void UpdateCannonBalls() 함수를 수정합니다.
미사일이 발사 되었을 때 !!

사용자 삽입 이미지

















Intersects 이함수가 두영역이 곂쳐지면  true 를 출력합니다.
if문으로 간단하게 완성되었습니다.

디버깅해봅시다.

728x90

이번에는 적기를 출현시켜 보겠습니다.
선언부에 추가된 내용입니다.

사용자 삽입 이미지






적기 출현 높이가 0.1~0.5인 이유는 게임화면 높이에다가 곱해서 1/10지점에서~5/10 출현시키려고 합니다.

다음 로드컨텐츠에서 이미지를 로드합니다.
사용자 삽입 이미지
 





총알 발사와 마찬가지로 함수를 하나 만듭니다.
사용자 삽입 이미지




























적기 출현시 velocity 수치만큼  x축으로 이동할 것이구요~ 화면 밖으로 나가면 사라집니다.

위에 함수에서 새로 나온 부분이
                    enemy.position = //비행기의 출현 위치를 설정합니다//
                        new Vector2(
                        viewportRect.Right,
                        MathHelper.Lerp(
                        (float)viewportRect.Height * minEnemyHeight,
                        (float)viewportRect.Height * maxEnemyHeight,
                        (float)random.NextDouble()));
이부분 입니다.
조금 복잡해 보이지만 똑같습니다 MathHelper.Lerp 이부분만 이해하시면 쉽습니다.
MathHelper.Lerp(최소값, 최대값, 0~1비율값)
최소 최대값 사이에 값을 출력해주는 함수입니다.
0에 가까울수록 최소값에 가까운값을 출력하고
1에 가까울수록 최대값에 가까운 값을 출력합니다.
0이면 최소값 1이면 최대값이 되겠죠?
화면크기 높이* 0.1 ~ 화면크기높이 *0.5 이 사이에서 적기가 출현 할것입니다.
#참고 랜덤.NextDouble 0.0~1.0 사이의 난수를 반환합니다.

다음 움직임을 주는것도 똑같습니다. Vector2(x축,0) 비행기는 x축으로 움직여야 함으로
x축에 최대 최소 좌표값을 넣어두었습니다 1~5까지 랜덤하게 움직이겠습니다.
#참고 UpdateEnemies() 이함수는 매프레임 실행되어야 합니다. 어디에 넣는지 아시죠?

이제 적기의 모든 초기화가 끝났습니다. 이제 화면에 출력하도록 합시다.

사용자 삽입 이미지







별다른 내용없습니다. 이제 디버깅해봅시다.
사용자 삽입 이미지

728x90
자 이번에는 총알을 발사 시키도록 하겠습니다.

GameObject 클래스를 수정합니다.
사용자 삽입 이미지

















총알의 움직임을 저장할 놈과 총알 발사여부를 판단할 bool형을 선언해둡니다.
그리고 함수내에서 초기화 시켜주시구요~
다시 돌아와서 선언하도록 합시다.
사용자 삽입 이미지














//추가한부분 ㅡ_-;;무시해주시구요~
Rectangle viewportRect 네모모양의 영역을 설정합니다 게임화면크기만큼이요 + _+
나중에 이곳을 벗어나면 미사일을 false로 바꿔서 사라지게합니다.
미사일을 false로 바꿔서 사라지도록 할것입니다

미사일 총 갯수를 지정하구요

미사일을의 수만큼 배열을 지정해야하기떄문에 배열로 선언합니다.

delay 는 미사일이 한발씩 시간차를 두고 발사하게 하기 위함입니다.
delaynum 도 같은 용도로 사용될것입니다.

선언부의 설정은 끝났습니다. 이제 그림이미지를 로드 시킵시다.

사용자 삽입 이미지

















cannonBalls 에 이미지를 로드 시켰습니다.

viewportRect = new Rectangle(0, 0,
               graphics.GraphicsDevice.Viewport.Width,  
               graphics.GraphicsDevice.Viewport.Height);
이놈은 게임상 화면 크기를 저장합니다.
#참고 : Rectangle(x좌표 ,y좌표, 가로크기,세로크기)
           graphics.GraphicsDevice.Viewport < 이건 현재 게임화면 크기를 불러옵니다.

이미지를 다 로드 시켰으면 이제 움직임을 주도록 합시다.
키보드 스페이스 키를 눌렀을 경우 발사여부를 true로바꾸고 true가 된 미사일이 있다면
움직임을 주는 형식으로 작성하겠습니다.
   protected override void Update(GameTime gameTime) 이 안에 작성합니다.

사용자 삽입 이미지










스페이스 키를 눌렀을 경우 delay 는 일정 시간이 지남에 따라 수치가 올라갑니다.
delatnum 만큼의 시간이 지났을 경우 실행합니다.
delay는 다시 0으로 바꿔주시고~
FireCannonBall(); 이라는 함수를 호출합니다.
사용자 삽입 이미지




사용자 삽입 이미지
foreach는 반복합니다. in 배열크기만큼
캐논볼스라는 배열의 크기만큼 ball을 생성합니다.

#참고 : 코사인 = x좌표 , 사인 = y좌표 #이부분은 따로 공부하세용~-_-쉽습니당 ㅋ

캐논각도의 방향으로 5만큼씩 이동할 좌표를 지정했습니다.
이제 실질적으로 지정한 좌표만큼 계속해서 움직이도록 하겠습니다.

사용자 삽입 이미지














움직임까지 완료 되었습니다. 이제 화면에 출력하면 되겠죠 ?

#참고 UpdateCannonBalls() 요놈은 매프레임 미사일이 발사되었는지 검사하고있습니다.

  protected override void Draw(GameTime gameTime) 안에 작성합니다.
사용자 삽입 이미지






같은 방식입니다 미사일이 발사되었다면 화면에 출력시키도록 합니다.

자 이제 확인해봅시다.

728x90
이번시간은 대포를 가져와서 움직임 까지 주겠습니다.

우리가 만들 게임은 왼쪽 하단에 위치한 대포가 90도 각도로 움직이면서 적을 격추시키는 게임입니다.
오늘은 대포를 키보드 입력에 따라 위아래 90도 안에서 움직이게 하겠습니다.

가장먼저 앞에서 했던 것 과 달리 클래스를 하나 지정해서 게임을 제작하겠습니다.
동일하게 텍스트를 가져오고 위치를 지정하는 형식이 많은 관계로 하나의 클래스로 바로바로 불러와서
게임 제작에 좀더 빠르고 용이하게 하겠습니다.

새 항목 추가에서 클래스를 추가합니다.

사용자 삽입 이미지

























GameObject.cs 라는 이름의 클래스를 정의합니다.

사용자 삽입 이미지


















 게임오브젝트 클래스는 각 그림, 위치, 각도, 그림중앙을 자료로
함수 게임오브젝트를 초기화 하고있습니다. 인자로는 그림을 받습니다.
게임에 오브젝트로 사용될 클래스의 정의가 끝났습니다.

다시 돌아가서 지금 선언한 클래스를 cannon의 이름으로 선언합시다.
사용자 삽입 이미지










다음으로는 캐논 그림파일을 로드 하겠습니다.
사용자 삽입 이미지
cannon을 초기화 해줍니다. 그림파일을 cannon으로 가져와주시고~
위치는 120,520 으로 설정해줍니다.

이제는 키보드 입력에따라 움직임을 주도록합시다.

사용자 삽입 이미지















가장 위에 키보드 입력상태를 KeyboardState 에 저장해주시구요
왼쪽키나 오른쪽을 눌렀을때 각도를 0.1 만큼 이동시키도록 합니다.

이대로 하면 캐논은 360도 빙글빙글 돌겠죠? 90도만 움직이게 제어합시다.
 cannon.rotation = MathHelper.Clamp(cannon.rotation, -MathHelper.PiOver2, 0);
캐논의 각도를 제어합니다 = Clamp(제어할변수, 최소값, 최대값)
PiOver2(90도),PiOver4(180도)...등등 있습니다.msdn 검색해서 한번보세요^^;

자이제 그림에 움직임까지 주었습니다. 이제 화면상으로 불러냅시다. Draw!!

사용자 삽입 이미지















그림이 회전하게 그려내는 spriteBatch.Draw 형태입니다. 전혀 어렵지 않아요-0-
많을 뿐이죠-_-......
아래 순서대로 입니다.
Draw (
         이미지 이름,
         이미지 위치,
         이미지 크기 null시 그림전체,
         색,
         각도,
         중심점(이걸중심으로 회전),
         이미지확대/축소 1은 원본크기,
         효과(이건아직 자세한건 모르겠습니다),
         레이아웃 깊이
)

자 이제 끝났습니다 움직이는 캐논이 완성되었습니다.

캐논의 중심점이 가운데가 아니냐는 말씀이 있으신데 이미지 자체에 크기를 조절해서
/2 로 나누면 1/3 지점을 중심점으로 조절했습니다.^^

사용자 삽입 이미지
728x90

먼저 위에 그림파일을 받아주세요^^ 게임에 쓰일 그래픽입니다.

자 다시 한번 시작해봅시다.
기본적으로 앞에서 말했던 슈팅게임제작과 비슷한 방식으로 제작됩니다.
전반적으로 한번 봤는데 상당히 모르는 문법이 많이 등장합니다. MSDN 을 적극활용해서
한번 같이 배워보도록 합시다.

가장 먼저 해야할일 기본적으로 배경을 깔도록 합시다.

선언부에
사용자 삽입 이미지
back 이라는 이름의 이미지를 선언하시구요






그림파일을 솔루션탐색기에 불러오도록 합시다( 플래시의 라이브러리와 비슷 )
솔루션 창에서
Content > 오른쪽마우스 > 새폴더 > game >오른쪽마우스 > 기존항목 추가 > 그림파일들

자이제 그림파일을 솔루션 넣었으면 프로그래밍 내에서 이미지 자료형의 back에 넣습니다.

사용자 삽입 이미지






 위에  "game\\background"  이렇게 작성한 이유는 ?
game 폴더안에 이미지가 있기때문입니다.~

자 이제 Draw 그리도록 합시다. (지겨워요 이제....)

사용자 삽입 이미지










그림크기가 창의 크기와 똑같기 떄문에 벡터 제로(0,0) 값으로 바로 표현했습니다.
자 가장 기초인 배경을 깔았습니다. 다음은 대포를 올려봅시다.

사용자 삽입 이미지
728x90

+ Recent posts