[Cocos2d-x] Day 6 - Resource Work & Bullet Class, Manager Create

|


 <DAY> 2016.05.23

 < WORK LIST >

 <Class> Object_Hero.cpp & Object_Bullet, Bullet_Manager.cpp

 - Object_Bullet.cpp & Bullet_Manager.cpp Create

 - Resource Work

 - State Apply



   1

  Object_Bullet.cpp & Bullet_Manager.cpp Create


Shot에 이미지를 불러온다.


Object_Bullet.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool Object_Bullet::init()
{
    if!CCSprite::init() ) return false;
 
    this->addAnimation( CreateAnimation( "Resource/Character/SHOT/SHOT_%d.png"                , "SHOT"        , MAX_SHOT          ) );
    this->addAnimation( CreateAnimation( "Resource/Character/MIDDLES_SHOT/MIDDLE_SHOT_%d.png" , "MIDDLESSHOT" , MAX_MIDDLE_SHOT  ) );
    this->addAnimation( CreateAnimation( "Resource/Character/FULL_SHOT/FULL_SHOT_%d.png"      , "FULLSHOT"    , MAX_FULL_SHOT     ) );
 
    m_iState   = SHOT;
    m_iType       = 0;
    m_fFrame   = 0;
    vec           = ccp( 00 );
    this->schedule( schedule_selector( Object_Bullet::update ));
    return true;
}
cs


종류는 

기본공격 ( SHOT )

중간 챠지 공격 ( MIDDLESSHOT )

풀 챠지 공격 ( FULLSHOT )



실질적으로 총알을 관리해주는 클래스다.

Bullet_Manager.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Bullet_Manager::init( Object_BackGround * _Bg )
{
    m_Bg = new Object_BackGround;
    m_Bg = _Bg;
 
    memset( m_pBullet, NULLsizeof(m_pBullet) );
    forint i = 0; i < MAXBULLET; i++ )
    {
        m_pBullet[i] = new Object_Bullet;
        m_pBullet[i]->init();
        m_pBullet[i]->setScale( 2 );
        m_pBullet[i]->setAnchorPoint( ccp( 0.50 ) );
        m_pBullet[i]->setPosition( CGPoint( -1000 ) );
        m_pBullet[i]->setActive(false);
        m_Bg->addChild( m_pBullet[i] );
    }
}
cs

BackGround를 매개변수로 가져와서 총알들을 초기화 해주는 동시에 addChild를 해준다.

요컨데, 플레이어가 공격 버튼을 누를때마다 총알을 만들어 주는 것이 아니라,

미리 정해진 숫자만큼 총알을 만들어 두고 총알의 좌표를 봐꾸어 쓰는 것이다.



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
Object_Bullet * Bullet_Manager::AddBullet( CGPoint _pos, CGPoint _vec, int _Type, int _State )
{
    setPlayerShotType( _Type );
 
    for(int i = 0; i < MAXBULLET; i++)
    {
        if( m_pBullet[i] == NULL ) continue;
        if( m_pBullet[i]->getActive() == FALSE )
        {
            if( _State == JUMP_ATTACK || _State == DROP_ATTACK )
                _pos.y += 25;
        
            _pos.x += 30 * _vec.x;
 
            if( _Type == 0 )      _pos.y += 130;
            else if( _Type == 1 ) _pos.y += 115;
            else if( _Type == 2 ) _pos.y += 0;
 
            if( _vec.x == 1 ) m_pBullet[i]->setFlipX( FALSE );
            else              m_pBullet[i]->setFlipX( TRUE );
 
            m_pBullet[i]->setType( _Type );
            m_pBullet[i]->setPosition( _pos );
            m_pBullet[i]->setDirection( _vec );
            m_pBullet[i]->setActive(TRUE);
            
 
            if( m_pBullet[i]->getIsVisible() == FALSE ) 
                m_pBullet[i]->setIsVisible(true);
            
            return m_pBullet[i];
        }
    }
    return NULL;
}
cs

공격 키를 누를때마다 총알의 설정을 다시 해주는 함수다.



   2

  Resource Work




START



JUMP_ATTACK



 DROP_ATTACK



SHOT



MIDDLES_SHOT



FULL_SHOT






 Work

IDLE

WALK

ATTACK

DASH

JUMP

DROP

  New   START  

  New JUMP_ATTACK

  New DROP_ATTACK

  New   SHOT

  New MIDDLES_SHOT

  New FULL_SHOT



   3

  State Apply




START


JUMP_ATTACK & DROP_ATTACK & SHOT


MIDDLES_SHOT


FULL_SHOT



State Apply

IDLE

WALK

ATTACK

DASH

JUMP

DROP

  New    START 

  New JUMP_ATTACK

  New DROP_ATTACK

  New DROP_ATTACK

  New    SHOT

  New MIDDLES_SHOT

  New  FULL_SHOT



평 가

 .난이도 : 쉬움

 별   점 :  

 한 마디: 어려운 점은 없었다.

리소스 작업은 여전히 고단하다.





<Progress List> 

 - Key Control

 - Box CollisionCheck

 - Camera Scroll 

 - Player Resource Work

 Player OutPut & Animation



<Complete List> 

  - Gravity Jump

  - MouseDrag Box Create

  - RayCast

  - File Input And Output

  BackGround Output

  - Player Output

  Bullet Output

  - Scroll Map Box

  - Player OutPut & Animation


And