디시인사이드 갤러리

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

갤러리 본문 영역

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

Vita500갤로그로 이동합니다. 2009.07.17 22:20:24
조회 244 추천 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/06/30 - -
AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
공지 프로그래밍 갤러리 이용 안내 [88] 운영자 20.09.28 45221 65
2870182 fnirsi dso510 오실로스코프 샀다 발명도둑잡기(118.216) 18:53 4 0
2870181 한국 지하철 특징 발명도둑잡기(118.216) 18:53 3 0
2870180 회사 내 실수 운전면허같이 벌점제 장단점 발명도둑잡기(118.216) 18:53 2 0
2870179 라즈베리필드-토요일 오후에 발명도둑잡기(118.216) 18:53 2 0
2870178 민주당이 또 부동산 폭등시키면 거기서 극우세력이 커진다 발명도둑잡기(118.216) 18:52 2 0
2870177 충주시 티셔츠 안 만드는 이유 발명도둑잡기(118.216) 18:45 4 0
2870176 수박 먹을때 이거 꼭 확인해라 ㅇㅇㅇㅇ(222.105) 18:43 6 0
2870175 공산독재국가에 살고있으니 나라가 하루하루 2재명씩 망해가는게 느껴지는구낭 ♥냥덩이♥갤로그로 이동합니다. 18:41 18 0
2870174 양자컴퓨터로 미시세계에서 시간 과거로 역전 [1] 발명도둑잡기(118.216) 18:30 9 0
2870173 진지하게 웹사이트 아이디어 평가좀 [2] 프갤러(210.97) 18:20 20 0
2870172 혹시 AI쪽 전문적으로 배울수있는 곳이 있을까여 [1] ㅇㅇ(14.38) 18:03 22 0
2870171 성수동 오니까 분내 존나 풍기노 [1] 아스카영원히사랑해갤로그로 이동합니다. 17:49 30 0
2870165 실베 글 보니 어제 썼던 글 생각이 난다 발명도둑잡기(118.216) 17:22 18 0
2870163 이상하네 [10] 루도그담당(58.239) 17:18 62 0
2870161 충격적인 브라질 빈민가의 먹거리 발명도둑잡기(118.216) 17:15 15 0
2870158 타인은 지옥이다 이씨발..진짜 [4] 프갤러(218.232) 16:40 46 0
2870156 학점 2점대면 걍 공기업 준비하는게 나은가 프갤러(118.235) 16:38 16 0
2870155 고교 학점제 상대평가 때문에 문제 발명도둑잡기(118.216) 16:37 16 0
2870153 너네는 근데 트렌드 어떻게 파악하냐 [4] ㅆㅇㅆ(124.216) 16:34 48 0
2870152 개발자면 맥북 필수지 [2] 뒷통수한방(1.213) 16:31 43 0
2870150 피해자라던 대표, 멍투성이 아내…'경호업체 성범죄 사건' 진실은? [1] 발명도둑잡기(118.216) 16:26 16 0
2870148 파이썬 가상환경은 요즘 도커 반필수라 딱히 와닿지 않긴함 [7] ㅆㅇㅆ(124.216) 16:20 39 0
2870147 파이썬 시발 제일 이해안가는게 가상환경임 [5] 프갤러(58.78) 16:18 46 0
2870146 파이썬으로 뭔가 크게는 못만드는데 문제가 AI 파이프라인이 파이썬임 [2] ㅆㅇㅆ(124.216) 16:16 35 0
2870144 후우.. 진정한 학습중 [1] 초코냥갤로그로 이동합니다. 16:08 33 0
2870143 Ai로 시대인데 ai로 뭘할거면 파이썬이 짱인듯 [5] ㅆㅇㅆ찡갤로그로 이동합니다. 16:05 40 0
2870142 요즘은 맥 필수아니지 [1] 프갤러(58.78) 16:00 31 0
2870141 내가 '할 수 있다'라고 할 수 있는 언어가 [3] ㅆㅇㅆ(124.216) 15:58 43 0
2870140 아 네부캠 떨어질것같네 ㅅㅂ [1] ㅇㅇ(175.223) 15:57 26 0
2870139 내가 느끼는게 파이썬 배운게 제일 잘한거같음 AI시대 들어오고나서 ㅆㅇㅆ(124.216) 15:54 39 0
2870138 누가 더 유명함 홀란드 니키미나즈 [2] 디바(59.28) 15:47 25 0
2870135 지피티는 검색 기능 없이 쓰면 [1] 루도그담당(58.239) 15:38 28 0
2870133 주말에 내미래 먹거리를 위해 코딩하는데 프갤러(14.5) 15:34 20 0
2870131 It회사에선 ㄹㅇ 맥 씀?? [5] 프갤러(118.235) 15:27 54 0
2870130 픎 7년 무정산이 하이부 탓? ㅇㅇ(175.223) 15:24 31 0
2870128 ❤✨☀⭐나님 시작합니당⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 14:54 16 0
2870126 탕후루 가게들 대부분 폐업했네 ㅇㅅㅇ 류류(118.235) 14:32 34 0
2870123 4.1. C ABI에 대한 구조적 종속성: 대체인가, 클라이언트인가? 루비갤로그로 이동합니다. 14:18 25 0
2870121 웹하다가 게임 가면 많이 힘들어 아예 다름. 웹은 세팅이 존나 빡세고 [2] ㅆㅇㅆ(124.216) 13:32 60 0
2870119 웹준비하다가 게임으로 틀면 ㅈㄴ 힘들겠지 [1] ㅇㅇ(1.250) 13:22 45 0
2870118 앱 출시하는거 엄청 복잡하네 [3] 프갤러(121.162) 13:15 75 0
2870117 저 오늘 열정코딩할게요 ㅇㅅㅇ [2] PyTorch갤로그로 이동합니다. 13:10 40 0
2870116 와 방금 대구 화교 초등학교앞에서 짱깨 이러는거 뭐냐 [3] ㅆㅇㅆ(124.216) 13:05 51 0
2870115 오늘 점심.jpg [2] 야옹아저씨갤로그로 이동합니다. 12:39 42 0
2870112 [대한민국] 트럼프 부정선거 메시지 [1] 프갤러(121.172) 12:25 29 0
2870110 집은 가난한데 12억정도 되는 땅이 있음 [4] ㅇㅇ(211.234) 12:22 49 1
2870108 방탄조끼 차은우 이새끼들 전부 군대로 튀네 ㅋㅋㅋ 뒷통수한방(1.213) 12:07 33 0
2870105 한국에 정상적인 노인들이 있음?? [7] 뒷통수한방(1.213) 11:22 44 0
2870104 내 주위에 베트남에 솔루션 판다는 사람 몇 명 있는데 [3] 프갤러(220.79) 11:14 48 0
뉴스 윤민수X이예준, 17일 듀엣곡 ‘결혼하지 못하는 이유’ 발매! 디시트렌드 07.04
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2