디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

DX 2D비행슈팅강좌 16. 경로를 따라 이동하기

Vita500갤로그로 이동합니다. 2009.07.17 22:20:24
조회 245 추천 0 댓글 0




===== DX 2D비행슈팅강좌 ======
===== 16. 경로를 따라 이동하기 =====
게임에서 적들은 지정된 경로를 따라서 나와 이동하고,
플레이어에게 적절하게 탄을 퍼부은후 사라집니다.
그렇게 이동하는 기능을 구현하여 보겠습니다.



1. 모션데이터 구조체
2. 경로를 따라 이동하기 구현
3. 모션재생
4. Update 분리
5. 모션데이터를 넣는 함수
6. 모션 데이터 넣기



1. 모션데이터 구조체
struct Motion
{
        FLOAT                Time;
        D3DXVECTOR3        Position;
};

이동에 필요한 정보를 담는 구조체를 만듭니다.
시간, 그리고 위치를 담습니다.




2. 경로를 따라 이동하기 구현
VOID Character::updateMotion(VOID)
{
        if ( _bMot_play == FALSE)
                return;

        if ( _bAni_first_play == TRUE)
        {
                _bAni_first_play = FALSE;
                return;
        }



        D3DXVECTOR3 vOut;

        _fMot_cnt += t;
        while ( _fMot_cnt > _fMot_time )
        {
                _fMot_cnt -= _fMot_time;
                _uMot_num++;

                if ( _uMot_num +1 >= _vMotion.size() )
                {
                        _uMot_num--;
                        _fMot_cnt = _fMot_time;
                        _bMot_play = FALSE;
                }
                else
                        _fMot_time = _vMotion[_uMot_num+1]->Time - _vMotion[_uMot_num]->Time ;


        }


        D3DXVec3Lerp( &vOut,
                                &_vMotion[_uMot_num]->Position,
                                &_vMotion[_uMot_num+1]->Position,
                                _fMot_cnt / _fMot_time );

        setPosition( &vOut );
}

이번 강좌의 구현부입니다.
잘보시면, 코드의 패턴은 애니메이션과 비슷합니다.
지정된 시간이 흐르면, 다음배열값으로 이동하죠.
애니메이션과는 달리, 모두 이동하면, 마지막위치에 멈추게 했습니다.
보통 슈팅게임에서 적이 화면상에 나타나 이리저리 이동한후 다시 사라지는 형태입니다.
그리고, 위치1과 위치2의 보간은 DX함수를 사용했습니다.
이부분은 직접구현해도 될만큼 쉽습니다.
보간으로 얻은값을 setPosition에 세팅하여, 위치를 갱신시켜줍니다.








3. 모션재생
VOID Character::playMotion(VOID)
{
        if ( _vMotion.size() <= 1
                ||_bMot_play == TRUE)
                return;
        

        _bMot_play                 = TRUE;
        _bMot_first_play = TRUE;

        _fMot_time = _vMotion[_uMot_num+1]->Time - _vMotion[_uMot_num]->Time ;
}

모션재생에 관한 조건을 엄격하게 하여, updateMotion에서는
특별히 신경쓰지 않도록하였습니다.
이부분은 updateAnimation에도 같이 적용되었습니다.
벡터의 개수가 1개이하이면, play를 호출하여도 사용되지 않습니다.

그리고 모션의 Time차이값을 처음 재생할때 받아 둡니다.









4. Update 분리
VOID Character::Update(VOID)
{
        updateMotion();
        updateAnimation();
}

애니메이션에 모션이 추가되었으므로, 기능을 구분하기위해서
각각의 updateMotion, updateAnimation함수를 만들고, 
그것을 모두 Update에 넣었습니다.









5. 모션데이터를 넣는 함수
VOID setMotion(MotionVec* vMotion);

모션을 받을때에도, 벡터로 통채로 받습니다.









6. 모션 데이터 넣기
MotionVec vMotion;
Motion* pMotion = NULL;

pMotion = new Motion;
pMotion->Position.x = 234.0f;
pMotion->Position.y = 64.0f;
pMotion->Time = .0f;
vMotion.push_back( pMotion );


pMotion = new Motion;
pMotion->Position.x = 96.0f;
pMotion->Position.y = 289.0f;
pMotion->Time = 2.0f;
vMotion.push_back( pMotion );


pMotion = new Motion;
pMotion->Position.x = 451.0f;
pMotion->Position.y = 267.0f;
pMotion->Time = 4.0f;
vMotion.push_back( pMotion );


pMotion = new Motion;
pMotion->Position.x = 234.0f;
pMotion->Position.y = 64.0f;
pMotion->Time = 6.0f;
vMotion.push_back( pMotion );


_Enemy.setMotion( &vMotion );
_Enemy.playMotion();

모션벡터를 만들어서 모션데이터를 넣습니다.
모션데이터는 new로 힙메모리를 사용하여야 하며,
시간을 0.0f, 2.0f, 4.0f, 6.0f등으로 증가하여야 합니다.
그리고, 각각의 시간이 될때의 위치를 넣어주면,
그 중간시간의 위치는 보간해줍니다.


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 끝까지 다 본 걸 후회하게 만든 용두사미 드라마는? 운영자 25/07/07 - -
AD 디지털 액세서리 기간한정 세일! 운영자 25/07/11 - -
271729 형들 비쥬얼스튜디오 6.0은 원래 그 이상버전에서 한거 못불러 오나요?? [2] ㅁㅁㅁ(58.235) 11.09.13 52 0
271728 형들 이거 좀 봐봐 [3] arduous갤로그로 이동합니다. 11.09.12 60 0
271726 <공고> 사업동업공고 - 컴퓨터활용에 능통하신분. 동업자 모집합니다. [3] winter(175.192) 11.09.12 66 0
271725 공휴일목록 인터넷에서 받아오기 좋은 곳 없음? [2] ㅇㅇㅇ(121.144) 11.09.12 47 0
271724 와 프갤이다! [6] ♥♡정수정♡♥갤로그로 이동합니다. 11.09.12 59 0
271723 공비횽 이과? [2] 로하로하알로하갤로그로 이동합니다. 11.09.12 91 0
271720 전 c를 잘 다룰줄암니다 [1] 오마이갓넬갤로그로 이동합니다. 11.09.12 105 0
271717 메소드를 랜덤으로 실행하려고 하면 [5] 초짜(203.229) 11.09.12 79 0
271715 춤춥세다 오마이갓넬갤로그로 이동합니다. 11.09.12 37 0
271714 진짜 팍근혜 찍는쉑이는 천하의 개.쉑이다. 쵸쵸(219.251) 11.09.12 73 0
271713 자살까지는 아니고 가끔 우울할 때 [3] 분당살람갤로그로 이동합니다. 11.09.12 58 0
271710 형들 이 드라이버들 구해줄수잇엉? [2] 옹잉양(122.42) 11.09.12 68 0
271709 컴파일하는 거 좀 조언해 주세요ㅜㅜ [2] 춫짱(121.130) 11.09.12 37 0
271708 형들 C언어 소스코드가 오류인데 수정좀해줘 [14] 11(121.139) 11.09.12 155 0
271705 형들 손정의처럼 되려면 대체어떻게해야할까요? [1] ㅇㅇ(112.186) 11.09.12 84 0
271704 아마 횽들도 공감 하는 자살 하고 싶은 이야기 [3] 새로운 뉴비(211.187) 11.09.12 86 0
271702 웹서비스 만들고 싶은 횽들 이거 한번 읽어봐 [4] monoless갤로그로 이동합니다. 11.09.12 103 0
271701 횽들 씨언어 늅늅이 질문좀 할게 [2] NOOB(121.167) 11.09.12 51 0
271700 이 어린양을 구원해주소서 프갤신들이여[2번째 복사해서 싸는글 찍~찍] [32] 오오미광주(121.137) 11.09.12 177 0
271696 게임개발 관련일하려면 머배워야합니까? [4] ㅇㄴㅇㄱ(112.186) 11.09.12 172 0
271694 등교시간 - ㅅ-)/ [2] 땡칠도사갤로그로 이동합니다. 11.09.12 93 0
271693 성님들 이클립스 질문입니다 [2] 123(210.218) 11.09.12 89 0
271692 쿄스케횽 맥주창고같이가염 [3] Light search갤로그로 이동합니다. 11.09.12 45 0
271690 개발완료 후 프로젝트 발표할때 개발방법론 참고해서 발표해야되나요 ㄷㄱ(116.38) 11.09.12 50 0
271689 전적 로하로하알로하갤로그로 이동합니다. 11.09.12 36 0
271688 벌래한테 반응하지 맙시다... 쵸쵸쵸(58.226) 11.09.12 93 0
271687 고졸은뒤져야겠다 [7] 호솽갤로그로 이동합니다. 11.09.12 253 0
271686 아직 레벨이 좉돼징 쉑이들은 나대지말고 책이나 읽어라. [2] 쵸쵸(219.251) 11.09.12 90 0
271685 나 as3 엔드로이드 질문있으면 다 물어봐요 지금당장 현기증난단말야 [16] lol(110.174) 11.09.12 114 0
271684 쵸쵸 드립보니 알만하네.. [8] 쵸쵸쵸(58.226) 11.09.12 114 0
271683 쵸쵸는 봐라 쿄스케갤로그로 이동합니다. 11.09.12 49 0
271682 프로그래머들은 소설쓰지마라 [2] ㅇㅇ(61.77) 11.09.12 148 0
271680 디자인학생인뎅 미디어아트나 영상쪽으로 갈려구 근뎅 c언어 배우면 좋을깡? [6] ㅋㅋㅋㅋ(211.200) 11.09.12 97 0
271679 프로그래머건 디자이너건 기획자건 자신만의 외장하드가 없다면 그건 쓰레기들 [4] 쵸쵸(219.251) 11.09.12 127 0
271678 머함? 뇌지랄갤로그로 이동합니다. 11.09.12 47 0
271677 내가 요즘 DB 삭제 프로그램을 만들고 있당~ [2] 거칠게갤로그로 이동합니다. 11.09.12 108 0
271676 vmware 어디서 받냐 [2] 나다 이놈아(114.29) 11.09.12 68 0
271674 프갤러들 모바일 앱도 하는 게이들 많지?? warota(221.150) 11.09.12 50 0
271673 프갤은 냄비같다 SuCo갤로그로 이동합니다. 11.09.12 56 0
271671 치킨어플에 대해 어케생각 [4] ㅇㅇ(61.77) 11.09.12 94 0
271669 모델링 천재해커(59.14) 11.09.12 62 0
271668 내가 사실 컴돌이다 ㅋㅋㅋ [2] 천재해커(59.14) 11.09.12 161 0
271666 학력 및 스펙, 그리고 내재가치와 외재가치에 대해서... [1] Deskjet(58.225) 11.09.12 147 0
271665 형들 이거 원래 이렇게 재밌었음?? [9] 잉?(121.186) 11.09.12 165 0
271663 내가 몇일전에 좃나 열받는 체험을 했다. [1] 새로운 뉴비(125.187) 11.09.12 76 0
271662 씨발 군대 갔다오면 진짜 포맷되냐 [11] dddd(113.199) 11.09.12 343 0
271661 형님들. 요즘에 [2] 빌어먹을야옹갤로그로 이동합니다. 11.09.12 50 0
271660 우리나라 여대생의 한달 생활비.jpg [13] Deanex갤로그로 이동합니다. 11.09.12 300 0
271659 프겔에서 왜 토익 얘기가 갑자기 나오지?? [4] 새로운 뉴비(125.187) 11.09.12 83 0
271657 형들은 프갤질 얼마나함 [8] Adelposs갤로그로 이동합니다. 11.09.12 84 0
뉴스 밀레나, 오늘(11일) 첫 정규앨범 'Where to Begin' 발매! 전곡 작사·프로듀싱 참여 디시트렌드 07.11
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2