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

우리가 만들 게임은 왼쪽 하단에 위치한 대포가 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 지점을 중심점으로 조절했습니다.^^

사용자 삽입 이미지

최신 소프트웨어가 학생들에게는 꽁짜!!!!!!!!!!
거기에 학과방문 강의까지!!!!!!!!!!
모두가 원하는 그것--b
마이크로소프트 드림스파크!! -0 -!!


사용자 삽입 이미지

드림스파크 SW 무료다운로드

l  홈페이지 : www.microsoft.com/korea/dreamspark

l  마이크로소프트의 최신 기술 SW 들을 무료로 다운로드 받도록 함으로서 글로벌 IT 인재로서의 성장을 지원

l  학생인증 방법 : ISIC 국제학생증을 통한 인증, DreamSpark 자유이용권을 이용한 인증

l  후원기관 : 지식경제부 SW 산업진흥원

l  데브피아, KGDA, Taeyo.NET 등 국내 22개 커뮤니티와 공동홍보 및 Q&A 게시판 운영 : 커뮤니티 확인 클릭!

l  무료제공 SW 리스트

제품이름

제품용도

Visual Studio 2008 Professional Edition

전문가용 소프트웨어 개발 도구

Visual Studio 2005 Professional Edition

전문가용 소프트웨어 개발 도구

Expression Studio 2

최신 인터랙티브 디자인 도구 세트, 아래의 5개 제품이 포함되어 있습니다.

Expression Media

디지털 자산 관리 도구

Expression Blend

애플리케이션 제작 디자인 도구

Expression Web

웹사이트 제작 디자인 도구

Expression Design

일러스트 그래픽 디자인 도구

Windows Server 2008 Standard Edition

서버 운영 체제

SQL Server 2008 Developer Edition

데이터베이스 소프트웨어

XNA Game Studio 2.0

크로스 플랫폼 게임개발 도구

XNA Creators Club

12 Month Trial Subscription

XNA Studio 로 만든 게임을 XBOX360 에 포팅하고 여러자료를 받을 수 있는 유료 멤버십

이외에도 Express Edition 제품들과 IT Academy Student Pass 온라인 e-learning 코스 포함


사용자 삽입 이미지

Mix On Class
학과방문 특강

  l  홈페이지 : www.mmicrosoft.com/korea/mixonclass

l  마이크로소프트 전문가들이 학생들의 꿈을 키워주는 최신 기술강의 진행

l  기간 : 1112일 – 125

l  특강리스트 및 특강 강사

강의 제목

특강강사

게임 산업 트렌드 & 크로스 플랫폼 게임개발도구 XNA Studio

강성재 차장, 박중석 대리

로봇 애플리케이션의 시작, Robotics Developer Studio

김영준 부장, 장현춘 부장, 김영욱 차장

소프트웨어를 통한 혁신적인 UX!! Silverlight & WPF

황리건 과장, 김대우 과장

미래의 부를 창조할 Mobile & Embedded

서진호 차장


사용자 삽입 이미지

이매진컵 2009 이집트


    l 
홈페이지 : www.imaginecup.co.kr

l  전세계 16세 이상의 학생들이라면 누구나 참가 가능한 글로벌 공모전

l  예선기간 : 200811월 – 20095

l  세계대회 : 20097월 이집트 카이로

l  참가자격 : 16세 이상의 모든 학생 (대학원생, 휴학생도 참가가능)

l  이매진컵 9개 경진부문 및 상금 (단위 : $) : 홈페이지 참고


l  이매진컵 소프트웨어 설계 부문 한국대표 선발전 안내

l  소프트웨어 설계 부문은 한국대표 선발전을 따로 개최하여 1위팀이 한국대표로20097월 이집트 카이로에서 열리는 이매진컵 세계대회에 출전

l  이매진컵 2009 한국대표 선발전은 천안시에서 개최

n  일정 안내

Ø   1회전 제출물 마감 : 200919일 신청서, 제안서 제출

Ø   2회전 제안서 발표 : 2009123

Ø   3회전 제출물 마감 : 2009227

Ø   한국대표 선발전 : 313일 천안시 개최

ü  시상내역 : 홈페이지 참고

l  이메진컵 임베디드개발 부문 한국대표 선발전 진행

l  임베디드 개발 부문도 올해부터 한국대표 선발전을 따로 개최하여 1위팀이 한국대표로 20097월 이집트 카이로에서 열리는 이매진컵 세계대회에 출전



http://www.microsoft.com/korea/msdn/dreamsparkfestival/index.aspx

사용자 삽입 이미지

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

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

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

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






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

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

사용자 삽입 이미지






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

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

사용자 삽입 이미지










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

사용자 삽입 이미지

제 3장에서는 클래스에 관한 개념을 배웠다.

사실 c에서 c++로 넘어올때 무엇때문에 공부해야되는지 차라리 게임제작에 필요한

언어를 더 빨리 배우면 안되는 것인지 -_-궁금하던차에 객체지향언어라는 이야기때문에

배우게 되었는데 제 3강에서 그 내용이 나왔다.

게임을 제작하기 위해 케릭터의 설정을 만든다고 하면은

그 케릭터가 하는 행동, 자료, 이 것들을 한 클래스로 지정해놓으면

많은 수의 케릭터를 불러올수도있고 메인코딩 자체가 짧아 질 것 같다.

뭉칠수 있는 덩어리를 하나의 덩어리로 모아서 사용에 보다 용이하게 만드는 작업?
내가 이해한 클래스는 이러하다 .
구조체와 다른 점은 함수도 클래스로 뭉칠수 있다는 것인데 기능 자체도 넣을 수있다는 점이
내가 정의한 자료형보다는 내가 정의한 함수 + 자료형의 느낌이다.

class 클래스이름 {
}
이런식으로 선언을 하고~
private: 내부 접근만 용이하다 클래스 내에서만 지정된 함수
public: 이녀석은 내부 , 외부 접근 모드 용이하다

그리고 하나 더있었는데-_-;;;뭐드라...

아무튼   클래스 내에서도 내부 외부 접근을 막아줄수 있는 기능이있다.

내부 접근은 한마디로 클래스 내에서 접근하는 방식
즉 class Door{
 int state
 void Open(){
  state=2
}}
이경우 state 라는 변수를 open함수에서 2로 초기화 시켜주었다.
이때는 내부접근이다 클래스 내에서 움직이는건 다 내부접근이다.
외부접근은 한마디로 다른 함수나 main 함수에서 불러오는 형태이다.

Door.state  < 도트 형태로 메인함수에서 불러올수있다.
액션스크립트에서 경로를 찾아 들어가는것과 비슷한 형태라서 금방이해했다.

슈팅게임의 움직임과 배경 그리고 총알까지만 구현하겠습니다.

추후에 충돌이나 이런쪽으로 좀더 문법을 알아야 하기때문에 이 게임은 여기서 잠시 중단하고

XNA자체에서 나오는 듀토리얼을 공부한 후 적기 출현과 충돌에 대해서 제작하겠습니다.

그럼 오늘 배경을 마지막으로 다음 강의는 XNA 2D게임제작을 올리겠습니다.


배경을 제작하려면 일단 배경이 있어야겠죠
미스터백님의 배경을 가져와서 다중스크롤 배경에 대해서 작성하고 마치도록하겠습니다.
두개의 배경을 다른속도로 스크롤 시키면서 좀더 역동적인 배경을 제작합시다.

사용자 삽입 이미지
사용자 삽입 이미지

전 이 두개를 배경으로 사용하겠습니다.
사용자 삽입 이미지








자 저렇게 선언 하시구요
back1 back2 가 그림의 좌표값으로 사용될것입니다.

사용자 삽입 이미지













자 이부분에 추가된 것은
back1, back2 의 간단한 if문입니다.
배경 크기가 500 x 600 입니다.

back1 이 먼저 출력될 그림입니다 속도는 10만큼씩 움직일거구요
back2 는 그위에 출력될 그림입니다. 속도는 15만큼 움직일겁니다.
당연히 그림크기가 600이니 다되면 다시 아래로 가게 되야 스크롤되겠죠 간단한 if문입니다.

자 이제 준비는 끝났습니다 Draw 에 가서 출력합시다

사용자 삽입 이미지



















그림 출력관련해서는 강의 #4 를 참고 해주시기 바랍니다.
Draw(이미지이름, 이미지이동좌표, 그림이미지크기, 색)
new Rectangle( x ,y , 이미지x, 이미지y)

그럼 이제 디버깅 해보도록 하겠습니다.



이제 xna 스튜디오에 익숙해지는 작업이 완료되었다고 생각합니다.
다음은 본격적인 2D게임 듀토리얼을 따라하겠습니다.
이 게임은 2D게임 듀토리얼이 끝나는대로 다시 진행하겠습니다.

수고하셨습니다^^
이번시간은 비행기에서 미사일이 발사되는 것까지 구현하도록 하겠습니다.

사용자 삽입 이미지

요놈이 미사일입니다. 이미지 컨텐츠에 추가해주세용~

사용자 삽입 이미지
















선언부분 입니다. 추가된 것은
   Texture2D cong;//총알이미지저장
   Vector2[] congtruepo;//총알 움직임
    bool[] coungpan;//총알발사여부
    int misailnumber = 0;//현재 미사일번호
    int maxmisail = 30;// 미사일 맥스수치
    float delay = 0.0f;// 딜레이시간저장
    float delatnum = 0.1f;//딜레이 한계시간

가장 맨위는 총알의 이미지를 저장할 곳이구요
다음은 총알의 위치정보를 담을 곳입니다. [] 많은수의 미사일을 조정해야함으로 배열로 선언했구요
bool형으로 총알이 발사되었는지 안되었는지 알기위해 선언했습니다. 물론 배열선언해야되구요
현재 미사일 번호와 맥스수치의 미사일 번호를 알아야 합니다.
그리고 어느정도 간격을 가지고 미사일을 발사해야함으로 지나가는 시간을 저장하는 곳과
어느정도 지난후 발사하라는 딜레이 한계시간을 지정했습니다.

컨텐츠에서 cong 에 이미지를 저장해주시구요

사용자 삽입 이미지






초기화 하는 부분입니다.
총의 위치정보를 배열을 사용할 만큼 선언해줍니다.
그리고 bool형도 사용할 만큼 배열을 선언해줍니다.
그리고 현재 마시일 넘버는 당연히 0이겠죠. 초기화 끝났습니다.
다음은 마시일을 움직여 봅시다.

사용자 삽입 이미지

 protected override void Update(GameTime gameTime)
        {
이부분 안에 작성한 코드입니다.
가장먼저 delay += (float)gameTime.ElapsedGameTime.TotalMilliseconds / 1000.0f; 현재시간을
delay 에 저장합니다. 그리고
if (delay >= delatnum) 어느정도 시간이 지났으면 실행합니다.
                    coungpan[misailnumber] = true;// 미사일 발사되었다고 해주시구요~
                    congtruepo[misailnumber] = pengmove;// 위치는 비행기와 같은 위치에 와야겠쬬?
                    congtruepo[misailnumber].X = (pengmove.X + pengs.Width / 2) - (cong.Width / 2) -100;
                    비행기에 미사일이 발사되는 곳으로 좌표를 이동시켜줍니다.
                   (케릭터 위치값 + 케릭터그림/2) - (총의 이미지/2) -100 < 임의 적으로 작성 한것
케릭터그림/2 하는 이유는 정확하게 가운데로 옮기기 위해서 입니다 총도 마찬가지구요~
-100은 계속 실행해보면서 위치값을 조절한것입니다. 비행기의 총이 약간 왼쪽에 있어서 -100을 했습니다.~

  misailnumber++;
계속해서 미사일넘버를 바꿔주시구요~
 if (misailnumber >= maxmisail)
 misailnumber = 0;
현재 마사일이 맥스수치에 도달 했을 경우 0으로 초기화합니다.
delay = 0.0f;
그리고 저장되어 있는 시간도 초기화 해주시구요~
발사 되었으니 다음 미사일은 새로 시간을 잡아야합니다.
 else
 delay = 0.0f;
또 z키를 누르지 않았으면 계속 딜레이 값은 0입니다.

사용자 삽입 이미지
 
그럼 미사일을 비행기 가운데로 옮겼으면 위로 움직이게 합시다.
   float misailmove =400* (float)gameTime.ElapsedGameTime.TotalMilliseconds / 1000.0f;
마시일의 속도를 지정해주시구요~ 400수치값이 올라갈수록 빨라집니다.

   for (int misailnumber = 0; misailnumber < maxmisail; misailnumber++)// 마시일의 수치만큼 for반복
            {
                if (coungpan[misailnumber] == true)//만약에 미사일이 발사되었다면~
                    congtruepo[misailnumber].Y -= misailmove;//y축으로 마사일 무브 만큼 움직여라.

그 아래 부분은 미사일이 화면 밖으로 나가면 계산하지 않기 위해 false값으로 바꿔버리는 역할입니다.

            int screenga = graphics.PreferredBackBufferWidth;
            int screense = graphics.PreferredBackBufferHeight;
화면의 크기를 screenga , se 로 저장했습니다.

     if (congtruepo[misailnumber].X > screenga || congtruepo[misailnumber].Y > screense||
                    congtruepo[misailnumber].X < 0.0f || congtruepo[misailnumber].Y <0.0f)
                {
                    coungpan[misailnumber] = false;
                }

미사일의 위치가 화면 밖으로 나가게 되면 false값으로 바꿔줍니다. 그럼 더이상 계산 안하겠죠?

자이제 모든 코딩이 끝났습니다. 이제 화면상에 출력만 하면 끝입니다.
   protected override void Draw(GameTime gameTime)
        {
이곳에 작성해줍시다~
사용자 삽입 이미지
for반복문 만약 미사일이 발사 되었다면 그려라

자이제 디버깅해봅시다^^;

+ Recent posts