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

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) 안에 작성합니다.
사용자 삽입 이미지






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

자 이제 확인해봅시다.

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

우리가 만들 게임은 왼쪽 하단에 위치한 대포가 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반복문 만약 미사일이 발사 되었다면 그려라

자이제 디버깅해봅시다^^;
이번에는 스프라이트 애니메이션이 적용된 케릭터에게 움직임을 주도록합니다.
좌우위아래로 자연스럽게 움직이는 케릭터를 `ㅡ` ㅋ

사용자 삽입 이미지

비행기 의 모습입니다. 이상하게 생겼지만 팽귄입니다..-_-...(어딜봐서...)

자 시작합니다.

가장 먼저 비행기를 화면상으로 나타내야합니다.

사용자 삽입 이미지

일단 가장먼저 비행기(펭귄)을 불러올 2D이미지를 선업합니다.
Texture 2D pengs;
그리고 이 펭귄을 움직임을 줄 벡터를 선업합니다.
Vector2 pengmove;

사용자 삽입 이미지







컨텐트에 Flight 의 비행기를 불러와주시구요 ( 불러오는 방법은 컨텐트>오른쪽마우스>추가 >기존항목)
불러오셨으면 로드 하도록합시다 앞에서 선언안 pengs에 이미지를 넣어봅시다.

사용자 삽입 이미지
  pengs = Content.Load<Texture2D>("Flight"); 자 그림파일을 pengs 에 저장했구요
다음으로는 케릭터의 움직임을 지정해줍시다.
사용자 삽입 이미지

 protected override void Update(GameTime gameTime)
게임실행시 계속해서 실행하라는 곳입니다.

일단 현재 키보드상태의 정보를 가지고있는 녀석을 지정해주시구요
 KeyboardState currentKeyState = Keyboard.GetState();
currentKeyState 요놈이 사용자가 키보드에 무엇을 입력했는지 저장하고 있습니다.
이제 수치값을 지정해봅시다 매초마다 얼만큼 움직이게 할것인가 입니다.

 float move = 200 * (float)gameTime.ElapsedGameTime.TotalMilliseconds / 1000.0f;
float 형태의 move를 지정합니다. float형태는 소수점까지 저장할수있는 형태입니다.
앞에 수치값의 변화에 따라 움직임의 속도가 달라집니다. 높을수록 빠르겠죠?

if (currentKeyState.IsKeyDown(Keys.Right))
                pengmove.X += move;
            if (currentKeyState.IsKeyDown(Keys.Left))
                pengmove.X -= move;
            if (currentKeyState.IsKeyDown(Keys.Up))
                pengmove.Y -= move;
            if (currentKeyState.IsKeyDown(Keys.Down))
                pengmove.Y += move;

만약 키보드 오른쪽 키를 눌렀다면 pengmove를 x축의 +방향으로 move 만큼 이동시켜라.
나머지 좌 위 아래도 같은 방법으로 코딩해줍니다.

자 모든 준비가 끝났습니다. 이제 상콤하게 움직여 봅시다.

화면상에 출력하는 부분으로 가봅시다.

사용자 삽입 이미지

Draw 가 화면상에 그리는 부분입니다.
   spriteBatch.Draw(pengs, pengmove, flightangle[anim], Color.White);
그립시다. ( 이미지명, 움직임 , 이미지변경애니메이션 , 색 )
flightangle[anim] < 이부분은 스프라이트 이미지 입니다. 앞에 강의 참조하시구요~ㅎ

자 이제 디버깅해봅시다.



다음시간에는 미사일을 발사 시키도록 합시다.

+ Recent posts