디시인사이드 갤러리

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

갤러리 본문 영역

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

Vita500갤로그로 이동합니다. 2009.07.17 22:20:24
조회 236 추천 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
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 비난 여론에도 뻔뻔하게 잘 살 것 같은 스타는? 운영자 24/06/03 - -
151313 스팩따위 가지고 취업 안된다고 찌질대는 횽아들에게... [2] 개쉛기갤로그로 이동합니다. 09.10.07 140 0
151312 본격 스펙공개 [4] sh(68.147) 09.10.07 192 0
151311 lgt oz 위젯 개발해본 횽 있음? [3] 고추장불고기갤로그로 이동합니다. 09.10.07 84 0
151310 스팩따위 가지고 취업 안된다고 찌질대는 횽아들에게...(2) [3] 물속의다이아갤로그로 이동합니다. 09.10.07 142 0
151309 스팩따위 가지고 취업 안된다고 찌질대는 횽아들에게... [7] 물속의다이아갤로그로 이동합니다. 09.10.07 213 0
151308 취업시즌이라 그런지 취업이야기 많네혀 [1] 초밥술사갤로그로 이동합니다. 09.10.07 67 0
151307 오늘 부터 KGC2009합니다 [7] Vita500갤로그로 이동합니다. 09.10.07 88 0
151306 최근 24시간동안 블로거들이 관심있어한 단어들. [3] rntjr갤로그로 이동합니다. 09.10.07 90 0
151305 자바에서 이자율이 0.0004% 이렇게가면 1E-4 4% 이렇게나와요; [4] ㅇㅇ(207.233) 09.10.07 155 0
151303 내가 지금까지 봐온 대기업 가는 애들 스타일 [13] ㅇㅇ(112.149) 09.10.07 327 0
151302 구직자나 인사담당자나 서로 편해지는 방법이 있긴하다. [7] 임베디드(112.150) 09.10.07 181 0
151301 취업 만만치가 않네 [77] ㅁㄴㅇㄹ(121.141) 09.10.07 453 0
151296 ....유리알횽만 빼고 보세염. [4] 컴공볍진갤로그로 이동합니다. 09.10.07 103 0
151295 Q Lazzarus / JaHellWrong / Vita500 / 파예 [2] HaveNoChoice갤로그로 이동합니다. 09.10.07 65 0
151294 c++에서 변수를 미지수로 선언할수는 없는건가? [20] 까북갤로그로 이동합니다. 09.10.07 162 0
151293 능력자분들 도와주세요ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ [2] 비담길갤로그로 이동합니다. 09.10.07 78 0
151292 가락시장 -> 구로디지털단지로 출퇴근 빡시겠지? [6] 켁큇갤로그로 이동합니다. 09.10.07 119 0
151291 야이 새퀴덜아. [6] 씬입사원갤로그로 이동합니다. 09.10.07 120 0
151289 나좀 도와주라 횽들 ㅠㅠ [20] brian(216.45) 09.10.07 158 0
151288 살려줘 형들 [3] brian(216.45) 09.10.07 46 0
151286 프갤 여신이 아얄씨에 소환된 모양이군요. clique갤로그로 이동합니다. 09.10.07 73 0
151285 비타오백 선생님 크롬도 말을 안듣습니다. [25] HaveNoChoice갤로그로 이동합니다. 09.10.07 171 0
151284 예상되는 시간, 예상되는 비용 [51] Vita500갤로그로 이동합니다. 09.10.07 186 0
151282 이상하다. 프갤은 여갤러가 올곳이 아닌데 [1] 케케켁켁갤로그로 이동합니다. 09.10.07 129 0
151281 자헬롱 선생님 비타오백 선생님 파폭이 말을 안듣네요 [3] HaveNoChoice갤로그로 이동합니다. 09.10.07 60 0
151280 IRC 어케들어감니카? [6] 성대아싸(121.137) 09.10.07 94 0
151279 오늘 여자사람이랑 영화본다능 [3] algo갤로그로 이동합니다. 09.10.07 110 0
151278 HTML에 float, clear, inline-block 설명 좀 해줘 [14] 에훗갤로그로 이동합니다. 09.10.07 86 0
151277 급히 퇴갤함미다 ㅠㅠ 김주현갤로그로 이동합니다. 09.10.07 31 0
151276 다 봐요 뿌잉뿌잉 (인증 하나 추가) [35] shin.갤로그로 이동합니다. 09.10.07 278 0
151275 뇌알책을 샀는데 이거이거 ㅎㄷㄷㄷㄷ [6] Venice3200+갤로그로 이동합니다. 09.10.07 128 0
151274 그림 저장 잘되는데? [3] Vita500갤로그로 이동합니다. 09.10.07 51 0
151273 형님들 웹페이지 관련해서 질문이 있습니다. [20] HaveNoChoice갤로그로 이동합니다. 09.10.07 91 0
151272 갑자기 생각났는데 말이죠 [4] algo갤로그로 이동합니다. 09.10.06 50 0
151271 게임회사에 대한 만화.... [15] 임베디드(112.150) 09.10.06 195 0
151270 퇴갤을 알리는 굿나잇 인사 [5] 숙신갤로그로 이동합니다. 09.10.06 64 0
151269 여러분들 노트북 뭐 쓰세요? [14] 아하스페르츠갤로그로 이동합니다. 09.10.06 190 0
151268 NAL횽 미안; [4] Q Lazzarus갤로그로 이동합니다. 09.10.06 59 0
151267 일어나서 거울을 봐쓴데 [2] algo갤로그로 이동합니다. 09.10.06 56 0
151266 열강 c++ 동강 보고 있는대 책 사야 되나 ? [5] 살모넬라(218.154) 09.10.06 73 0
151264 윤드림호출 [8] MoonJu(222.126) 09.10.06 117 0
151263 에잇, 네이트온 친추나 해요 [4] 숙신갤로그로 이동합니다. 09.10.06 88 0
151259 오늘까지 휴가라서 학교에 다녀왔는데 [1] clique갤로그로 이동합니다. 09.10.06 48 0
151257 이력서에 결코 써서는 안 될 말들 [1] prismatic갤로그로 이동합니다. 09.10.06 89 0
151256 shin. 횽이 f(x)의 라챠 블라블라 그 노래 춤을 마스터했다고한다. [6] 숙신갤로그로 이동합니다. 09.10.06 75 0
151254 malloc 막쓰면 힙이 부족합니까? [1] 맥콜(124.61) 09.10.06 60 0
151253 * 늬들이 이걸 알리가 없지 [12] 알려주세요(210.102) 09.10.06 82 0
151251 연봉협상 비법 알려드림 [1] 캐꼬꼬닭(221.142) 09.10.06 140 0
151250 그래도 세상은 Y=F(x) [1] 물속의다이아갤로그로 이동합니다. 09.10.06 58 0
151249 뿌우~뿌우~ 신이 왔어요 [8] shin.갤로그로 이동합니다. 09.10.06 123 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2