[Cocos2d-x] Day 11 - Enemy CollisionCheck & Effect

|


 <DAY> 2016.05.27

 < WORK LIST >

 <Class> Object_Enemy.cpp & Enemy_Manager.cpp

 - Enemy CollisionCheck & Position Arrangement & Effect

 - Resource Work

 - State Apply



   1

  Enemy CollisionCehck & Effect


플레이어의 총알과 적 캐릭터의 충돌 체크를 위하여

에너미 매니저에 충돌체크 함수를 하나 만들어 주었다.

매계 변수로는 총알의 위치, 거리, 타입을 받았다.


만들어지지 않았거나, 비활성화 상태인 에너미는 넘기고 만들어져 있는 에너미를 검사한다.

현재 존재하고 있는 에너미의 위치를 가져와서

총알과의 위치와 에너미의 위치를 넘겨주어 거리를 잰다.


두 개의 거리가 매계변수로 받아온 dis보다 작아지면 충돌한 것으로 판단해

에너미 이미지의 색을 바꿔주고 Hit함수로 총알의 타입을 넘겨주어 총알에 타입에 따라서 에너미의 체력을 깎아준다.

덤으로 플레이어의 총알은 사라지면서 이펙트를 뿌려준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool Enemy_Manager::CollisionCheck( CGPoint _pos, int _dis, int _Type )
{
    for(int i = 0; i < MAXENEMY; i++ )
    {
        if( m_pEnemy[i] == NULL ) continue;
        if( m_pEnemy[i]->getActive() == FALSE ) continue;
            
        CGPoint pos = m_pEnemy[i]->getPosition();
        VectorInformation vi = ST::call()->Distance( _pos, CGPoint( pos.x, _Type == 2 ? pos.y : pos.y + 120.f) ); // 120
 
 
        if( vi.Distance < _dis )
        {
            // Hit 사운드 추가 예졍.
            ST::call()->EFM.addEffect( _Type == 2 ? CGPoint( _pos.x , _pos.y + 120.f ) : _pos, _Type );
            m_pEnemy[i]->setColor( ccc3( 255100100 ) );
            m_pEnemy[i]->hit( _Type );
            
            return TRUE;
        }
    }
    return FALSE;
}
cs

플레이어 총알의 타입에 따라서 에너미의 체력을 깎아준다.

에너미의 체력이 0보다 작거나 같으면 에너미의 모습을 지워준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Object_Enemy.cpp
 
void Object_Enemy::hit( int _Type )
{
    if( _Type == 0 ) --m_eHP;
    else if( _Type == 1 ) m_eHP -= 2;
    else if( _Type == 2 ) m_eHP -= 3;
 
    if( m_eHP <= 0 )
    {
        this->setActive(false);
        this->setIsVisible(false);
    }
}
cs



타입에 따른 이펙트

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
void Object_Effect::update(float dt)
{
    m_fFrame += dt;
 
    switch( getType() )
    {
        case 0:
            {
                m_iState = PLAYER_SHOT;
 
                if( m_fFrame < 0.1f) this->setDisplayFrame( ChangeAni( m_iState ), 0 );
                else if( m_fFrame < 0.2f) this->setDisplayFrame( ChangeAni( m_iState ), 1 );
                else if( m_fFrame < 0.2f) this->setDisplayFrame( ChangeAni( m_iState ), 2 );
                break;
            }
        case 1
            {
                m_iState = PLAYER_MIDDLE_SHOT;
                if( m_fFrame < 0.1f) this->setDisplayFrame( ChangeAni( m_iState ), 0 );
                else if( m_fFrame < 0.2f) this->setDisplayFrame( ChangeAni( m_iState ), 1 );
                break;
            }
        case 2
            {
                m_iState = PLAYER_FULL_SHOT;
                if( m_fFrame < 0.1f) this->setDisplayFrame( ChangeAni( m_iState ), 0 );
                else if( m_fFrame < 0.2f) this->setDisplayFrame( ChangeAni( m_iState ), 1 );
                break;
            }
        case 3:
            {
                m_iState = ENEMY_BOOM;
                if( m_fFrame < 0.1f) this->setDisplayFrame( ChangeAni( m_iState ), 0 );
                else if( m_fFrame < 0.2f) this->setDisplayFrame( ChangeAni( m_iState ), 1 );
                break;
            }
    }
 
    if( m_fFrame > 0.3f )
    {
        this->setPosition(CGPoint( -10001000 ));
        this->setIsVisible(FALSE);
        this->setActive( FALSE );
        m_fFrame = 0;
    }
}
cs





   2

  Resource Work





SHOT_HIT


MIDDLE_HIT


FULL_HIT



 WORK

IDLE

WALK

ATTACK

DASH

JUMP

DROP

START  

JUMP_ATTACK

DROP_ATTACK

SHOT

MIDDLES_SHOT

FULL_SHOT

WALK_ATTACK

CHAGE_IDLE

CHAGE_WALK

CHAGE_DASH

CHAGE_JUMP

CHAGE_DROP

CHAGE2_IDLE

CHAGE2_WALK

CHAGE2_DASH

CHAGE2_JUMP

CHAGE2_DROP

LADDER_UP

LADDER_DOWN

WALL_DROP

ENEMY_IDLE

ENEMY_WALK

ENEMY_ATTACK

ENEMY_BULLET

ENEMY_BOOM

  New SHOT_HIT

  New MIDDLE_HIT

  New FULL_HIT




   3

  State Apply


Player Shot Effect



 STATE APPLY

IDLE

WALK

ATTACK

DASH

JUMP

DROP

START  

JUMP_ATTACK

DROP_ATTACK

SHOT

MIDDLES_SHOT

FULL_SHOT

WALK_ATTACK

CHAGE_IDLE

CHAGE_WALK

CHAGE_DASH

CHAGE_JUMP

CHAGE_DROP

CHAGE2_IDLE

CHAGE2_WALK

CHAGE2_DASH

CHAGE2_JUMP

CHAGE2_DROP

LADDER_UP

LADDER_DOWN

WALL_DROP

ENEMY_IDLE

ENEMY_WALK

ENEMY_ATTACK

ENEMY_BULLET

ENEMY_BOOM

  New SHOT_HIT

  New MIDDLE_HIT

  New FULL_HIT



평 가

 .난이도 : 보통

 별   점 :  

 한 마디: 같은 소스의 반복이다.





<Progress List> 

 - Camera Scroll 

 - Player Resource Work

 Player OutPut & Animation

 New Player Soht Effect     - <Complete>


<Complete List> 

  - Key Control

  - Gravity Jump

  - MouseDrag Box Create

  - Box CollisionCheck

  - RayCast

  - File Input And Output

  BackGround Output

  - Player Output

  Bullet Output

  - Scroll Map Box

  - Player OutPut & Animation

  - Slope Move

  - Ladder

  Wall_Drop

  Enemy

  Enemy_Effect_Boom

  New Player Soht Effect


And