디시인사이드 갤러리

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

갤러리 본문 영역

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

Vita500갤로그로 이동합니다. 2009.07.17 22:20:24
조회 237 추천 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/17 - -
공지 프로그래밍 갤러리 이용 안내 [71] 운영자 20.09.28 35593 62
2713612 도리스아는 근데 왜 넥도리아로 로그인 비로그인 함 ㅇㅅㅇ? 류류(118.235) 09:35 3 1
2713611 내 뇌가 회백질이래 너무 스트레스 받아서, 도리스아(119.195) 09:34 2 0
2713610 머리 안 아프냐 공부 잘하고 완벽주의자가 대학물리학 강제로 수능끝나고, 도리스아(119.195) 09:33 2 0
2713609 비형식적 오류 귀납적 오류 심리적 오류 언어적 오류 자료적 오류 진영논리 도리스아(119.195) 09:30 7 0
2713607 나 주말에 편의점에서 맥주 샀는데 [4] 아스카영원히사랑해갤로그로 이동합니다. 09:17 20 0
2713606 책 샀당... 4주전에...., 글 못쓴다고 인민재판 이나라 떠나야지 도리스아(119.195) 09:16 10 0
2713605 4차산업혁명에서 개발자디비관리자가 연봉 5억이라고 뒷통수한방(1.213) 09:14 9 0
2713604 도리스아야 너는 [37] ㅇㅇ(118.235) 09:08 59 0
2713603 취준관련질문 급함) [6] 프갤러(118.235) 09:02 29 1
2713602 프갤 대참사 레전드 [1] ♥주먹쥐고일어선냥덩♥갤로그로 이동합니다. 08:40 33 0
2713601 <에밀리, 파리에 가다>란 드라마 있대서 생각나는 예전 글 [2] 발명도둑잡기갤로그로 이동합니다. 08:34 13 0
2713600 라이센스가 없어.... 나락으로.... 더는 버틸 수 없단다... 도리스아(119.195) 08:30 13 0
2713599 무엇을 해야할 지... 킨드레드...,처럼 아칼리처럼... 그냥 대한민떠 [5] 도리스아(119.195) 08:23 36 0
2713598 개발자 관두는 사람이 그리 많다던데 [6] ㅇㅇ(59.23) 08:10 96 0
2713595 웹스퀘어 쓰는곳 가면 물경력이냐 [1] ㅇㅇ(1.219) 07:55 39 0
2713594 구글 엔지니어 이 문서 내용이 뭐죠 발명도둑잡기갤로그로 이동합니다. 07:40 27 0
2713592 나님 시작합니당❤+ ♥주먹쥐고일어선냥덩♥갤로그로 이동합니다. 07:25 16 0
2713591 이듬해 1월까지 약속한 300만달러를 북한에 다 보냈다. 검찰은 이 대 프갤러(211.170) 07:11 25 0
2713590 사람은 에너지를 축적할 필요가 있다 [6] 프갤러(210.183) 07:09 53 3
2713588 페르낭 브로델이 본 시장경제와 자본주의의 차이 발명도둑잡기갤로그로 이동합니다. 06:59 16 0
2713586 전공공부랑 개발공부 비중을 어떻게 둬야할지 [22] 프갤러(210.101) 06:39 140 0
2713585 출근 싫다 엉덩이팡팡갤로그로 이동합니다. 06:31 19 1
2713584 기상 넥도리아갤로그로 이동합니다. 06:24 14 0
2713583 자료구조를 공부한다는게 뭐임 [4] 프갤러(210.101) 06:20 65 0
2713581 디버깅이 벌레 잡는 거니까 아무래도 약간 화내는 일 발명도둑잡기갤로그로 이동합니다. 05:55 19 0
2713580 대륙의 기상 [2] 발명도둑잡기갤로그로 이동합니다. 05:52 45 0
2713579 방금 전 코르그 인스타그램 발명도둑잡기갤로그로 이동합니다. 05:48 28 0
2713577 잘난새끼들딱기다려라 보법E노무현갤로그로 이동합니다. 05:23 30 0
2713576 2026년 겸업금지 풀리면 A TO ZERO ENT. A2B(211.170) 05:19 29 0
2713574 컴공 존나 얼척 없는 듯 프갤러(223.39) 05:04 64 0
2713573 야 개인프로젝트도 ㅇㅇ(27.35) 04:57 35 1
2713572 파일 입출력 수정 어케 하나요.. [1] ㅇㅇ(117.111) 04:56 37 0
2713567 히키코모리도 부모지원이있어야가능한거야 ㅇㅇ(49.142) 03:02 44 0
2713566 미국 학부에서 cs 부전공 따려고 국비 [4] 프갤러(118.235) 02:57 64 1
2713565 금융권 it 직무 가고싶은데 빅분기 sqld ADsp 3종세트 따는거 [28] ㅇㅇ(1.248) 02:48 113 1
2713557 자기가 부산 경북 전남 국숭 라인인데 [2] 프갤러(27.124) 02:01 70 1
2713556 인공지능 하시는분들 [2] ㅇㅇ(223.62) 01:51 51 0
2713554 문과 전문직 vs 개발자 뭐가 더 어려움? [3] ㅇㅇ(1.248) 01:40 91 0
2713553 프론트 필수 소양 알려주세요 이시꾸갤로그로 이동합니다. 01:37 36 0
2713552 이직하고싶은데 만들어놓은게 없어 이시꾸갤로그로 이동합니다. 01:34 35 0
2713549 TF세포들 육성중 ㅇㅅㅇ 나트륨찡갤로그로 이동합니다. 01:26 29 0
2713547 ㅋㅋㅋㅋㅋ ㅇㅇ(121.129) 01:15 34 0
2713544 디버그 완료 잔다 [4] 초코냥갤로그로 이동합니다. 01:08 81 1
2713542 그냥 프갤러 소통 그만할래... 내일 또 올거고, 그렇지만, 안온다면 [2] 도리스아(119.195) 01:05 33 1
2713536 단호박 꽃 나랏님이 드셔도 무방할듯.... 윤대통령 님 호박이 쓴데요. 도리스아(119.195) 00:34 56 0
2713535 실리콘 가슴 끼고 버튜버 하면 얼마 범? [4] 프갤러(121.170) 00:19 77 0
2713534 TF세포들 육성중 ㅇㅅㅇ 나트륨찡갤로그로 이동합니다. 00:17 31 0
2713532 TF팀 할 일: 대비책 해결책 분석 연구하는 일 ㅇㅅㅇㅋ 나트륨찡갤로그로 이동합니다. 00:08 26 0
2713528 지난 5개월간 주말 만보기 평균50걸음 이하다 [2] 피치피(49.142) 00:02 44 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2