[Cocos2d-x] Day 2 - Create Box / Box CollisionCheck

|


 <DAY> 2016.05.19

 < WORK LIST >
 <Class> Object_Box.cpp & Box_Manager.cpp

 - Box Create & Box CollisionCheck

 - Box_Manager.h & Box_Manager.cpp

 


   1

  Box Create & Box CollisionCheck

충돌 체크 함수

1
2
3
4
5
6
7
bool Object_Box::CollisionCheck( CGPoint _pos )
{
    CGRect rc;
    rc.origin = ccp( this->getPosition().x, this->getPosition().y );
    rc.size   = CGSize( 100100 );
    return CGRect::CGRectContainsPoint( rc, _pos );
}
cs


박스 이미지 생성

그리고, 충돌체크 함수를 하나 만들었다.

기본적으로 박스의 위치, 사이즈가 들어있다.

매개 변수로는 플레이어의 위치를 받는다.

1
2
3
4
5
6
7
8
9
bool Object_Box::init( CGSize _size )
{
    if!CCSprite::initWithFile("TestImage/BOX.png") ) return false;
 
    this->setAnchorPoint( ccp(0,0) );
    this->setScaleX( _size.width / 100 );
    this->setScaleY( _size.height / 100 );
    return true;
}
cs



   2

  Box_Manager.h & Box_Manager.cpp


여러개의 박스를 관리하기 위한 박스 매니저 클래스 생성.

1
2
3
4
5
6
7
8
9
10
#define MAXBOX    50
 
class Box_Manager : public CCSprite{
public:
    Object_Box * m_pBox[MAXBOX];
 
    void init(){ memset( m_pBox, NULLsizeof(m_pBox) ); }
    Object_Box * AddBox( CGPoint _pos );
    Object_Box * CollisionCheck( CGPoint _pos );
};
cs


AddBox 함수를 만들어서 씬_타워 init에서 박스를 추가한다.

화면에 실질적으로 박스가 추가된다.

그리고 충돌체크 함수를 만들었다.

플레이어가 실질적으로 충돌 했을 때 부딪힌 블럭을 for문을 통해 검사하여 플레이어의 

위치를 매개변수로 보내고 

부딪힌 블럭을 반환 받는다.

만약 부딪힌 블럭이 충돌되지 않았을 때 if( Box == NULL ),

setPosition을 하지 않으 므로써

플레이어가 박스 안으로 들어가지 않게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Object_Box * Box_Manager::AddBox( CGPoint _pos )
{
    for(int i = 0; i < MAXBOX; i++)
    {
        if( m_pBox[i] == NULL )
        {
            m_pBox[i] = new Object_Box;
            m_pBox[i]->init( CGSize(50,10) );
            m_pBox[i]->setAnchorPoint( ccp( 00 ) );
            m_pBox[i]->setPosition( _pos );
            return m_pBox[i];
        }
    }
    return NULL;
}
 
Object_Box * Box_Manager::CollisionCheck( CGPoint _pos )
{
    for(int i = 0; i < MAXBOX; i++ )
    {
        if( m_pBox[i] == NULL ) continue;
        if( m_pBox[i]-> CollisionCheck( _pos ))
            return m_pBox[i];
    }
    return NULL;
}
 
cs


결과



평 가

 .난이도 : 쉬움

 별   점 : ★★☆ 

 한 마디: 맵의 토대 마련.




<Progress List> 

 - Key Control

 - Gravity Jump

 - Box Create

 - Box CollisionCheck


<Complete List> 

  - No Data

  - No Data

  - No Data

  - No Data






And