게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
api 오브젝트 충돌 체크에 관해서 질문 드려요..
게시물ID : programmer_15748짧은주소 복사하기
작성자 : 우아앙무지개
추천 : 0
조회수 : 1366회
댓글수 : 4개
등록시간 : 2016/02/07 00:09:01
옵션
  • 본인삭제금지
OBJ 클래스 부분에서 충돌 처리하는 로직이구요..
---------------------------------------------------
RECT C_OBJ::monsterRect(int top, int bottom, int left, int right)
{
monsterBulletRect.top = top;
monsterBulletRect.bottom = bottom;
monsterBulletRect.left = left;
monsterBulletRect.right = right;

return monsterBulletRect;
}
RECT C_OBJ::PlayerRect(int top, int bottom, int left, int right)
{
playerRect.top = top;
playerRect.bottom = bottom;
playerRect.left = left;
playerRect.right = right;
return playerRect;
}
RECT C_OBJ::getMonsterRect()
{
return monsterBulletRect;
}
RECT C_OBJ::getPlayerRect()
{
return playerRect;
}
-----------------------------------------------------

OBJ 를 관리하는 매니저를 따로 만들어서

void C_OBJMGR::createMonsterBullet(int nPosX, int nPosY, int nRenderId, float fV, int nTargetX, int nTargetY)
{
pMonsterBullet = new C_OBJ;
pMonsterBullet->init((float)nPosX, (float)nPosY, nRenderId, E_OBJ);
pMonsterBullet->setTarget((float)nTargetX, (float)nTargetY);
pMonsterBullet->makeDir();
pMonsterBullet->setV(fV);
pMonsterBullet->monsterRect(100, 210, 201, 120);
m_listObj.push_back(pMonsterBullet);
}
void C_OBJMGR::createPlayer(int nPosX, int nPosY, int nRenderId, float fV)
{
pPlayer = new C_OBJ;
pPlayer->init((float)nPosX, (float)nPosY, nRenderId, E_PLAYER);
pPlayer->setV(fV);
pPlayer->PlayerRect(30, 30, 30, 30);
m_listObj.push_back(pPlayer);

}
----------------------------------------------------------------------
main에다가 이거 만들어 줘 하면 동적할당 으로 생성을 하고 링크 리스트 를 이용하는 로직인데요.

main 의 오브젝트 생성과 기타 부분

---------------------------------------------------------------------

case WM_KEYDOWN:
{
C_WININPUT::getInstance()->setKeyDown((BYTE)wParam, true);
RECT dest;
bool collisonBox = IntersectRect(&dest, &m_cObj.getMonsterRect(), &m_cObj.getPlayerRect());
if (collisonBox != 0)
{
m_cObjMgr.createPlayerBullet((int)m_cObjMgr.getPlayerPosX() + 50, (int)m_cObjMgr.getPlayerPosY() + 25, 4, 0.3f, 18080000, -5000);
}
if (life == 1 && C_WININPUT::getInstance()->isKeyDown(VK_SPACE))
{
m_cObjMgr.createPlayerBullet((int)m_cObjMgr.getPlayerPosX() + 50,(int)m_cObjMgr.getPlayerPosY() + 25,4, 0.3f, 18080000, -5000);

}
else if (life == 1)
{
m_cObjMgr.createMonsterBullet(0, 10, 4, 0.3f, (int)m_cObjMgr.getPlayerPosX(), (int)m_cObjMgr.getPlayerPosY());
}

return 0;
-----------------------------------------------------------------------------------------------------------
비트맵을 출력하는 부분이구요
HDC mainDC = GetDC(m_hWnd);
BitBlt(m_cDcMgr.getDc(2), 0, 0, m_cDcMgr.getWidht(1), m_cDcMgr.getHeight(1), m_cDcMgr.getDc(1), 0, 0, SRCCOPY);
std::list<C_OBJ*>::iterator itor = m_cObjMgr.getBegin();
while (itor != m_cObjMgr.getEnd())
{
C_OBJ *pObj = *itor;
int getRenderId = pObj->getRenderId();
int nWidht = m_cDcMgr.getWidht(getRenderId);
int nHeight = m_cDcMgr.getHeight(getRenderId);
BitBlt(m_cDcMgr.getDc(2), (int)pObj->getPositionX(), (int)pObj->getPositionY(), nWidht, nHeight, m_cDcMgr.getDc(getRenderId), 0, 0, SRCCOPY);
itor++;
}
BitBlt(mainDC, 0, 0, m_cDcMgr.getWidht(2), m_cDcMgr.getHeight(2), m_cDcMgr.getDc(2), 0, 0, SRCCOPY);

ReleaseDC(m_hWnd, mainDC);
}
------------------------------------------------------------------------------------------------------------

이런식으로 로직을 했는데요~

1.충돌 처리를 하는 방법이 api에서 자체적으로 지원하는 함수를 이용하는 방법

2.총알 오브젝트의 좌표 와 목표물의 좌표의 거리를 계산해서 하는 방법

생각 한게 이정도 인데요

첫번째는 무슨짓을 해도 충돌처리가 안되네요...ㅠㅠ

두번째는 플레이어 오브젝트 의 위치는 잘 받아오는데, 총알 오브젝트의 위치는 처음 생성된 위치만 저장이 되네요..
하루종일 생각 하고 이방법 저방법 다 해봤는데.. 모르겠어서 질문합니다..


전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호