지금까지 만든현황
이제
Raycast를 만들자레일케스트는 캐릭터가 한칸 이동할때마다 범위를 정해서 그안에 충돌 하는 물체가 있는지 확인 하는기능이다.void BlockManager::Raycast(CGRect _rc, CGPoint _vec, float _distance, raycast* _ray){ float detail = 0.1f; for( _ray->distance = 0 ; _ray->distance < _distance ; _ray->distance+=detail ){ int index = CollisionChack(_rc);
if( index > -1 ){ _ray->distance -= detail; _ray->m_pBlock = m_pAdjacentBlock[index]; return; } _rc.origin.x += _vec.x * detail; _rc.origin.y += _vec.y * detail; }}
이기능을 수행할때 전체 블럭을 계산하면 타일이 많아지면 제가 사용하는 컴퓨터는 떵컴이라 랙이 심합니다.
그래서 근처 이동 불가능한 타일박스와 캐릭터의 거리가 96보다 클경우 수집하는 함수를 만들었다.
void BlockManager::AdjacentChack(CGPoint _pt)
{
CGPoint vec;
float distance;
memset(m_pAdjacentBlock, NULL, sizeof(m_pAdjacentBlock));
for( int i = 0 ; i < MAX_BLOCK ; i++ ){
if( m_pBlock[i] == NULL ) continue;
if( m_pBlock[i]->getTileInfo() != TILE_NOTMOVE) continue;
vec = ccp(_pt.x - m_pBlock[i]->getPosition().x, _pt.y - m_pBlock[i]->getPosition().y );
distance = sqrtf(vec.x * vec.x + vec.y * vec.y);
if( distance < 96 )
{
// 수집 //
if( count > ABJACENT_BLOCK){ count = 0; return; }
m_pAdjacentBlock[count++] = m_pBlock[i];
m_pBlock[i]->setColor(ccc3(255,0,0));
}
else{
m_pBlock[i]->setColor(ccc3(255,255,255));
}
}
}
약간의 버그가 있다. 충돌 지점에서 계속 밀어 넣으면 뚫리는 부분이 있다.
레이 캐스트를 만들면서 느낀 점 : 매우어렵다...ㅠㅠ
결과 동영상(미완성)2015.04.23
2015.04.24
AdjacentChack, CollisionChack 이 두 함수가 사실상 하는 일은 비슷하다.
그래서 방법을 바꾸려고 한다. 타일을 많이 깔면 어차피 랙이 발생해서 렌더타겟을 사용해야 할 거 같다.
그래서 CollisionChack안에 AdjacentChack에서 사용하던 거리를 계산해서 검사하던 기능을 넣었다. 사실상 블록을 수집해도 랙은 줄지 않고 쓸모없는 함수다. 삽질하고 있었다.
최종 Raycast 결과 동영상
동영상 찍다 알게 된 점. 장해물 방향을 바꿔줬더니 그림만 위치가 바뀌었다.. 충돌 위치도 좀 손봐야 할 거 같다.
2016.01.15 추가
렉트가 겹치는지 확인하는 부분 충돌체크
이동 수행 하는부분
사이즈, 이동방향, 거리, 충돌체
'Programming > Cocos2D-X' 카테고리의 다른 글
파일저장 꾸민 맵 저장하기 (0) | 2015.04.24 |
---|---|
랜더타겟? 메모리 관리? CCSpriteBatchNode!! (0) | 2015.04.24 |
내가 선택한 타일 그리기 그리고 각에 맞춰서 타일 그리기 (0) | 2015.04.23 |
화면 스크롤 만들기 (0) | 2015.04.21 |
CollisionBlock 마우스 클릭으로 생성하기 (0) | 2015.04.20 |
캐릭터 리소스 변경작업 (0) | 2015.04.20 |
CollisionBlock_Manager 만들기 (0) | 2015.04.19 |
CollisionBlockd 만들기 (0) | 2015.04.18 |