[Cocos2d-x] Day 10 - Enemy & Enemy_Effect

|


 <DAY> 2016.05.26

 < WORK LIST >

 <Class> Object_Enemy.cpp & Enemy_Manager.cpp

 - Enemy & Enemy_Effect

 - Resource Work

 - State Apply



   1

  ENEMY & Enemy_Effect


Object_Enemy.cpp

Enemy_Manager.cpp

Enemy_Bullet.cpp

EnemyBullet_Manager.cpp


추가 완료.


Object_Hero.cpp

Bullet_Manager.cpp

와 똑같은 부분이기 때문에 적용을 쉽게 했고

따로 설명하진 않겠다.


단지, 플레이어와 적 캐릭터의 차이는 크게 2가지 인데,

첫 번째는

직접 조종하는가?

혼자서 움직이는가?

의 차이가 있고


두 번째는

하나 인가?

여럿인가?

의 차이가 있다.


두 번째 부분같은 경우에는 Bullet_Manager와 다를 것이 없다.


이펙트 부분도 마찬가지다.

Bullet이랑 다를바가 없다.



   2

  Resource Work




ENEMY_IDLE



ENEMY_WALK



ENEMY_ATTACK



ENEMY_BULLET


ENEMY_BULLET_BOOM



 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

  New ENEMY_IDLE

  New ENEMY_WALK

  New ENEMY_ATTACK

  New ENEMY_BULLET

  New ENEMY_BOOM




   3

  State Apply


ENEMY ANIMATION





 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

  New ENEMY_IDLE

  New ENEMY_WALK

  New ENEMY_ATTACK

  New ENEMY_BULLET

  New ENEMY_BOOM



평 가

 .난이도 : 보통

 별   점 :  

 한 마디: 기술적 난이도는 없고 그냥

할 일이 많았다.





<Progress List> 

 - Camera Scroll 

 - Player Resource Work

 Player OutPut & Animation

 New Enemy                   - <Complete>

 New Enemy_Effect_Boom  - <Complete> 


<Complete List> 

  - New  Key Control

  - Gravity Jump

  - MouseDrag Box Create

  - New  Box CollisionCheck

  - RayCast

  - File Input And Output

  BackGround Output

  - Player Output

  Bullet Output

  - Scroll Map Box

  - New  Player OutPut & Animation

  - Slope Move

  - Ladder

  Wall_Drop

  New Enemy

  New Enemy_Effect_Boom


And

[Cocos2d-x] Day 9 - WALL_DROP

|


 <DAY> 2016.05.25

 < WORK LIST >

 <Class> Object_Hero.cpp

 - WALL_DROP

 - Resource Work

 - State Apply



   1

  WALL_DROP


박스의 옆면의 충돌 중일 때 중력에 의해 떨어지는 힘을 0으로 만들고,

m_fAccelerator  = 0;

점프키가 눌리지 않았다면 플레이어의 y값 좌표를 내려준다.

반대로 충돌중이 아니라면( NULL 이라면 ) 상태를 DROP으로 바꿔준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            case WALL_DROP:
            {
                if( ST::call()->BM.CollisionCheck( DropSet(), BOX ) == NULL )
                {
                    m_iState = DROP;
                    if( vec.x == 1 ) pos.x -= 20.f;
                    else             pos.x += 20.f;
                }
                else
                {
                    if( ST::call()->BM.Raycast( pos, CGPoint(0,-1), &Hit, m_fAccelerator ) )
                        m_iState = WALK;
 
                    if!m_bJumpKeyPress )
                        pos.y -= 150 * dt;
                    
                    m_fAccelerator = 0;
                }
                break;
            }
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
47
48
49
50
51
        if(GetAsyncKeyState('C') && m_bJumpKeyPress == FALSE )
        {
            if( m_iState != DROP        && 
                m_iState != JUMP        &&
                m_iState != CHAGE_JUMP  &&
                m_iState != CHAGE2_JUMP &&
                m_iState != CHAGE_DROP  &&
                m_iState != CHAGE2_DROP &&
                m_iState != JUMP_ATTACK &&
                m_iState != DROP_ATTACK )
            {
                m_bJumpKeyPress = TRUE;
 
//                ST::call()->SM.play(SND_JUMP);
 
                if( m_bAttackDown )  
                    m_iState = CHAGE_JUMP;
                else if( m_bAttackDown && m_fAttackTimeDlay >= 2.4f )
                    m_iState = CHAGE2_JUMP;
                else                 
                    m_iState = JUMP;
 
                // 대시 점프 시 점프 높이 상승.
                if( m_iPrevState == DASH       ||
                    m_iPrevState == CHAGE_DASH ||
                    m_iPrevState == CHAGE2_DASH ) 
                {
                    m_fAccelerator       = JUMPPOWER + DASH_JUMP_POWER;
                    m_bMoveSpeedIncrease = TRUE;
                }
                else if( m_iPrevState == WALL_DROP )
                {
//                    ST::call()->SM.play( SND_WALL_JUMP );
 
                    m_fAccelerator = JUMPPOWER + 100;
                    if( vec.x == -1 )
                    {
                        pos.x += 45.f;
                        pos.y += 10.f;
                    }
                    else
                    {
                        pos.x -= 45.f;
                        pos.y += 10.f;
                    }
                }
                else
                    m_fAccelerator = JUMPPOWER;
            }
        }
        else if(!GetAsyncKeyState('C')) m_bJumpKeyPress = FALSE;
cs



   2

  Resource Work




WALL_DROP


 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

  New WALL_DROP




   3

  State Apply


WALL_DROP



 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

  New WALL_DROP




평 가

 .난이도 : 보통

 별   점 :  

 한 마디: 플레이어의 상태가 많아서 

조절하기가 조금 난해 했다.





<Progress List> 

 - Key Control

 - Box CollisionCheck

 - Camera Scroll 

 - Player Resource Work

 Player OutPut & Animation

 New Wall_Drop  - <Complete>


<Complete List> 

  - Gravity Jump

  - MouseDrag Box Create

  - RayCast

  - File Input And Output

  BackGround Output

  - Player Output

  Bullet Output

  - Scroll Map Box

  - Player OutPut & Animation

  - Slope Move

  - Ladder

  New Wall_Drop


And

[Cocos2d-x] Day 8 - Ladder

|


 <DAY> 2016.05.24

 < WORK LIST >

 <Class> Object_Hero.cpp

 - Ladder

 - Resource Work

 - State Apply



   1

  Ladder


주인공이 사다리를 타기 위해서

물리적으로 충돌하지 않는 박스를 만들어

주인공이 그 박스에 다으면 사다리가 근처에 있는것으로 간주해

↑↓버튼을 누를수 있게 하였다.


물리적인 충돌을 Collision이라고 한다면

그 반대는 Trigger라고 보면 된다.


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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
if(GetAsyncKeyState(VK_UP) )
        {
            if( m_bLadder )
            {
                m_iState  = LADDER_UP;
                pos.y += MoveSpeed;
                vec.y = 1;
 
                if( ST::call()->BM.LadderRaycast( pos, CGPoint( 01 ), &Hit, 100 ) )
                    pos.x = Hit.ObTarget->rc.origin.x + ( Hit.ObTarget->rc.size.width / 2 );
 
                m_fLaderUpTime += dt;
 
                static bool LaderPressUp = FALSE;
                if!LaderPressUp && m_fLaderUpTime > 0.1f )
                {
                    LaderPressUp     = TRUE;
                    m_fLaderUpTime   = 0;
                    m_iLadderUpFrame++;
 
                    if( m_iLadderUpFrame > 4 ) 
                        m_iLadderUpFrame = 1;
                }
                LaderPressUp = FALSE;
            }
        }
 
        if(GetAsyncKeyState(VK_DOWN) )
        {
            if( ST::call()->BM.CollisionCheck( CGPoint( pos.x, pos.y - 2.f ), LADDER ) != NULL && !m_bLadder )
            {
                this->setDisplayFrame( ChangeAni( LADDER_DOWN ),(int)m_fFrame % 5 );
                pos.y = pos.y - 5.f;
            }
 
 
            if( m_bLadder )
            {
                m_iState  = LADDER_DOWN;
                pos.y -= MoveSpeed;
                vec.y = -1;
 
 
                if( ST::call()->BM.LadderRaycast( pos, CGPoint( 0-1 ), &Hit, 100 ) )
                    pos.x = Hit.ObTarget->rc.origin.x + ( Hit.ObTarget->rc.size.width / 2 );
 
                m_fLaderDownTime += dt;
 
                static bool LaderPressDown = FALSE;
                if( m_fLaderDownTime > 0.1f && !LaderPressDown )
                {
                    LaderPressDown     = TRUE;
                    m_fLaderDownTime = 0;
                    m_iLadderDownFrame++;
 
                    if( m_iLadderDownFrame > 4 ) 
                        m_iLadderDownFrame = 1;
                }
                LaderPressDown = FALSE;
            }
        }
cs

기본적으로 사다리가 아니면 ↑↓키를 입력해도 아무런 일도 일어나지 않는다.

사다리 트리거 이벤트가 발생 했을때 플레이어가 ↑↓ 키를 누르면
트리거 박스의 WIDTH값을 구해서 2로 나누고 트리거 박스의 x값을 구해서 서로 더해준다.
그리고 그 값을 플레이어 현재 위치 값 x에 대입해주면 사다리 가운데로 고정되게 된다.


밑의 소스코드는 플레이어가 사다리에 올라가거나 내려가는 상태일때의 소스다.

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
case LADDER_UP:
            {
                if( ST::call()->BM.LadderRaycast( pos, CGPoint( 01 ), &Hit, 100 ) )
                {
                    this->setDisplayFrame( ChangeAni( m_iState ),(int)m_fFrame % m_iLadderUpFrame );
 
                    if( ST::call()->BM.CollisionCheck( pos, LADDER ) != NULL &&
                        ST::call()->BM.CollisionCheck( CGPoint( pos.x, pos.y + 40.f ), LADDER ) == NULL )
                    {
                        pos.y = pos.y + 40.f;
                        m_iState = IDLE;
                    }
                    else if( ST::call()->BM.CollisionCheck( CGPoint( pos.x, pos.y + 20.f ), LADDER ) == NULL )
                    {
                        this->setDisplayFrame( ChangeAni( m_iState ),(int)m_fFrame % 5 );
                        this->setDisplayFrame( ChangeAni( m_iState ),(int)m_fFrame % 6 );
                    }
                }
                break;
            }
        case LADDER_DOWN:
            {
                ST::call()->BM.LadderRaycast( CGPoint( pos.x, pos.y + 30 ), CGPoint( 0-1 ), &Hit, 100 );    
 
                this->setDisplayFrame( ChangeAni( m_iState ),(int)m_fFrame % m_iLadderDownFrame );
 
                if( ST::call()->BM.CollisionCheck( CGPoint( pos.x, pos.y + 30 ), LADDER ) == NULL )
                {
                    m_iState = DROP;
                }
                break;
            }
cs



   2

  Resource Work




LADDER_UP



LADDER_DOWN



 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

  New LADDER_UP

  New LADDER_DOWN




   3

  State Apply


LADDER_UP & LADDER_DOWN



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

  New LADDER_UP

  New LADDER_DOWN




평 가

 .난이도 : 보통

 별   점 :  

 한 마디: 의외로 사다리는 쉬웠다.





<Progress List> 

 - Key Control

 - Box CollisionCheck

 - Camera Scroll 

 - Player Resource Work

 Player OutPut & Animation

 New Ladder  - <Complete>


<Complete List> 

  - Gravity Jump

  - MouseDrag Box Create

  - RayCast

  - File Input And Output

  BackGround Output

  - Player Output

  Bullet Output

  - Scroll Map Box

  - Player OutPut & Animation

  - Slope Move


And
prev | 1 | 2 | 3 | 4 | 5 | ··· | 15 | next