디시인사이드 갤러리

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

갤러리 본문 영역

DX 2D비행슈팅강좌 18. 충돌박스 표시

Vita500갤로그로 이동합니다. 2009.07.22 21:07:27
조회 448 추천 0 댓글 0




===== DX 2D비행슈팅강좌 ======
===== 18. 충돌박스 표시 =====
충돌박스를 넣었으면, 어디가 충돌영역인지 확인할수있어야 한다.
사각형으로 그려서 그 영역을 표시해준다.
Tab을 누르면, On/Off할수있다.


1. 애니메이션의 키이미지 변수를 만든다.
2. GameBase에 추가된 변수
3. 메모리에 흰 텍스쳐생성
4. 충돌영역 그리기






1. 애니메이션의 키이미지 변수를 만든다.
VOID Character::setAnimation(const ImageVec2* vImage)
{
        _vImages = *vImage;

        _pAni_Key = _vImages[0][0];
}


배열로 접근하면, 너무길어 코드를 읽기가 힘들다.
그래서, 현재의 보여줄 이미지를 받아둔다.
코드중간중간에도 이런식으로 대치되어 사용된다.








2. GameBase에 추가된 변수
static BOOL _bBound_visible;
static LPDIRECT3DTEXTURE9 _pWhite_texture;

충돌박스 그릴여부를 체크하는 변수와 흰색텍스쳐변수가 추가되었다.






3. 메모리에 흰 텍스쳐생성
D3DXCreateTexture(_pd3dDevice, 2, 2, 1, NULL, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &_pWhite_texture);

D3DLOCKED_RECT rcLock;
_pWhite_texture->LockRect(0, &rcLock, NULL, D3DLOCK_NO_DIRTY_UPDATE );
DWORD* pColor = (DWORD*)rcLock.pBits;
*(pColor+0) = 0xffffffff;
*(pColor+1) = 0xffffffff;
*(pColor+2) = 0xffffffff;
*(pColor+3) = 0xffffffff;
_pWhite_texture->UnlockRect(0);

메모리에 2x2크기의 텍스쳐를 만든다.
그리고, 주소를 얻어와서 흰색으로 채우고, 락을 해제한다.
이것을 사용하여, 충돌박스영역을 그리게 된다.







4. 충돌영역 그리기
if ( !_bBound_visible) 
        return;


static RECT rcSource = {0,};
static D3DXVECTOR3 vCenter(.0f, .0f, .0f);
static UINT uSize = 0;


if ( !_vBoundBox.empty() )
{
        uSize = _vBoundBox.size();

        for (UINT i=0; i<uSize; ++i)
        {
                rcSource.right = LONG(_vBoundBox[i]->RB.x - _vBoundBox[i]->LT.x);
                rcSource.bottom = LONG(_vBoundBox[i]->RB.y - _vBoundBox[i]->LT.y);
                _pSprite->Draw( _pWhite_texture, &rcSource, &vCenter, &_vBoundBox[i]->LT, 0x50E74280 );
        }
}
else 
{
        uSize = _pAni_Key->BoundBox.size();

        for (UINT i=0; i<uSize; ++i)
        {
                rcSource.right = LONG(_pAni_Key->BoundBox[i]->RB.x 
                                                - _pAni_Key->BoundBox[i]->LT.x);
                rcSource.bottom = LONG(_pAni_Key->BoundBox[i]->RB.y
                                                - _pAni_Key->BoundBox[i]->LT.y);

                _pSprite->Draw( _pWhite_texture, &rcSource, &vCenter,
                                                &_pAni_Key->BoundBox[i]->LT, 0x50E74280 );
                

        }

}

_bBound_visible값이 TRUE이면, 충돌박스영역을 그린다.
Character에 충돌이 있으면, 그것을 그리고, 없으면, 이미지의
충돌박스영역을 그린다.
만약, 충돌박스 영역이 없으면, 아무것도 그리지 않는다.
충돌박스영역의 좌표를 가지고 와서 그린다는것을 빼면,
어려운 내용은 없다.
다만, 변수명이 길어서 글자를 보기가 어려울뿐이다.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 어떤 상황이 닥쳐도 지갑 절대 안 열 것 같은 스타는? 운영자 24/05/20 - -
145326 콘푸레이크의 개발이유 [12] Vita500갤로그로 이동합니다. 09.08.28 250 0
145325 캐꼬꼬닭횽은 봅니다. [13] Vita500갤로그로 이동합니다. 09.08.28 84 0
145324 야근을 존나 시키면 개발자가 어떻게되는지를 이스트소프트가 보여준다 [8] 소발자(58.233) 09.08.28 403 0
145323 12 군나르손`(121.170) 09.08.28 29 0
145322 project euler.. 한문제 더 풀었음. [5] Rei@디씨갤로그로 이동합니다. 09.08.28 92 0
145321 요즘 내가 좋아하는 애 [2] 머그컵갤로그로 이동합니다. 09.08.28 108 0
145320 본질에는 일치. 비 본질에는 자유. 모든 것에 사랑. [7] 머그컵갤로그로 이동합니다. 09.08.28 150 0
145319 주인공 캐릭터가 너무 약하잖아!! [11] 쭈중이갤로그로 이동합니다. 09.08.28 198 0
145318 신종 플루는 하늘의 심판이다 [3] 머그컵갤로그로 이동합니다. 09.08.27 87 0
145317 작업관리자 이름 바꾸기?... 프로그램 어디를 손대야 할까요? [1] 좃프로그래머(124.53) 09.08.27 80 0
145316 인터파크는 배송비를 안받는 대신 배송이 조낸 느린가보네. [4] 머그컵갤로그로 이동합니다. 09.08.27 82 0
145315 perl 점 알려주세여 [1] ㅇㄹ(122.46) 09.08.27 56 0
145314 밖에 안나가고 집안에만 쳐박혀 있으면 신종플루 안걸림? [2] 머그컵갤로그로 이동합니다. 09.08.27 67 0
145313 횽들 내상각에 지금 신종플루걸리는것도 괜찮다고 생각하는데... [3] 군대지원(222.101) 09.08.27 79 0
145312 혹시 리눅스 추천해주실분 [8] カミ(122.47) 09.08.27 148 0
145311 웹하는 넘들은 [2] 늅늅늅(125.132) 09.08.27 83 0
145309 졸라 열심히 장식질하기.. [2] 온순한감자갤로그로 이동합니다. 09.08.27 78 0
145307 버그없는자여 그들에게 돌을 던져라. [2] 피로토스갤로그로 이동합니다. 09.08.27 133 0
145306 나도달팽이 NaCl갤로그로 이동합니다. 09.08.27 105 0
145305 근데 캐노니컬은 돈 좀 버냐 [3] 분당살람갤로그로 이동합니다. 09.08.27 71 0
145304 1인당 100만원 정도 비축해 두자. [3] 피로토스갤로그로 이동합니다. 09.08.27 159 0
145303 일단.. 세븐은 깔았네염.. [3] 혼아갤로그로 이동합니다. 09.08.27 72 0
145302 2학기 수강신청 했음 [2] Rei@디씨갤로그로 이동합니다. 09.08.27 77 0
145301 2단 로켓도 문제가 있었나 봄 [3] 이모군(116.127) 09.08.27 92 0
145300 I'm a creep, I'm a weirdo. 머그컵갤로그로 이동합니다. 09.08.27 58 0
145299 프로그램 서적을 출판하려면 얼마나 공부해야 하나요? ㅏㅏㅏ(121.132) 09.08.27 45 0
145298 지거국 컴공이면 대기업 들어갈수 있나요? [3] qqqqqq(119.67) 09.08.27 161 0
145297 정모후기 [10] 초딩♡갤로그로 이동합니다. 09.08.27 198 0
145295 잉여인간의 질문.jpg [5] 홍석천의눈길갤로그로 이동합니다. 09.08.27 175 0
145294 ADO.NET에서 소스안에 DB커넥션 정보를 두면 안되죠? 씨돌이(118.217) 09.08.27 37 0
145292 이미지 이동에 대해 질문좀 드릴께요 [4] 아이유(58.237) 09.08.27 92 0
145286 내 포트폴리오 [7] 박거지(121.161) 09.08.27 177 0
145285 달팽이를 짤려면 일단 디- 코드를 봐야 제맛 라루나갤로그로 이동합니다. 09.08.27 295 0
145283 난 윈도우 모바일을 써 보진 않았지만 [4] 분당살람갤로그로 이동합니다. 09.08.27 113 0
145279 포항왔는데 흠.. [3] Zaphod갤로그로 이동합니다. 09.08.27 123 0
145278 점심을 많이 먹었더니 아직도 소화가 안된다 [1] 유리한갤로그로 이동합니다. 09.08.27 70 0
145275 대학생때 뭘해야될까요 [7] 학생(122.128) 09.08.27 212 0
145274 홰이크 때릴꺼야?(116.40) 09.08.27 75 0
145272 이 달팽이 소스 존내 뷰티풀 하지 않나여?????? [22] 님드라(58.238) 09.08.27 423 0
145271 재태크가 뭔가요? [1] ㅇㅇㅃ갤로그로 이동합니다. 09.08.27 47 0
145269 프로그래밍 배우는 척하기 4일째 C#으로 연습문제 첨으로 풀어본거 [1] ㅇㅇ(124.54) 09.08.27 115 0
145268 프로그래머로 롱런하려면... [3] 심심이(203.248) 09.08.27 206 0
145267 jdk 1.4 버젼은 왜 이클립스가 안돼? [3] (203.252) 09.08.27 115 0
145266 다시 삽들러 갑니다.. [2] 혼아갤로그로 이동합니다. 09.08.27 78 0
145265 뉴비가 질문하는데 게임 서버 프로그래머 많이 어렵나여? [2] 노소프소갤로그로 이동합니다. 09.08.27 171 0
145264 제가 던파 아바타 사기를 당했거든요? 그놈 ID는 알고 있어요. 라루나갤로그로 이동합니다. 09.08.27 79 0
145263 엔지니어로서 롱런하는 법 [9] 학생(125.128) 09.08.27 351 0
145262 역시 씨닙횽이 회사를 그만두니깐, 프갤이 조용하구나.. [2] Vita500갤로그로 이동합니다. 09.08.27 144 0
145260 이 세계는 슬믚에 가라안자 이꾼... 분당살람갤로그로 이동합니다. 09.08.27 59 0
145258 재테크에 대한 나의 생각. [1] 심심이(203.248) 09.08.27 72 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2