Bezier Action
º£Áö¾î °î¼±¿¡ ´ëÇÑ °ø½ÄÀº ¸ð¸£´õ¶óµµ ¾î¶»°Ô »ý°Ü ¸Ô¾ú´ÂÁö´Â ¾È´Ù°í °¡Á¤ÇÏ°í °ÀǸ¦ ÁøÇàÇÑ´Ù. ÄÚÄÚ½º2D-x º£Áö¾î °î¼±Àº 4°³ÀÇ Æ÷ÀÎÅÍ°¡ ÇÊ¿äÇÏ´Ù. ÀÚ·áÇüÀº ´ÙÀ½°ú °°´Ù. ccBezierConfig
typedef struct _ccBezierConfig {
CCPoint endPosition; CCPoint controlPoint_1; CCPoint controlPoint_2; } ccBezierConfig; 4°³¶ó°í Çߴµ¥ 3°³¹Û¿¡ ¾ø´Ù. ³ª¸ÓÁö ÇÑ °³´Â ÇöÀç ½ºÇÁ¶óÀÌÆ®ÀÇ À§Ä¡ÀÌ´Ù. ½ÇÇàȸéÀ» ¸ÕÀú º¸ÀÚ. 1. º£Áö¾î, 2º£Áö¾î ¸®¹ö½º 3, ±âº»À§Ä¡·Î ¸®¼Â, 4, Á¡ÇÁ·Î ¸Þ´º¸¦ ¸¸µç´Ù. ¸Þ´º »ý¼º
bool HelloWorld::init()
{ bool bRet = false; if( !CCLayerColor::initWithColor(ccc4(255, 255, 255, 255))) { return true; } bRet = true; m_debugDraw = DebugDraw::create(); this->addChild(m_debugDraw); CCMenuItemFont::setFontSize(50); CCMenuItemFont::setFontName("fonts/Nanum Brush Script.ttf"); CCMenuItemFont *pMenuItem1 = CCMenuItemFont::create( "Bezier", this, menu_selector(HelloWorld::DoClickTag)); CCMenuItemFont *pMenuItem2 = CCMenuItemFont::create( "Reverse", this, menu_selector(HelloWorld::DoClickTag)); CCMenuItemFont *pMenuItem3 = CCMenuItemFont::create( "Reset", this, menu_selector(HelloWorld::DoClickTag)); CCMenuItemFont *pMenuItem4 = CCMenuItemFont::create( "Jump", this, menu_selector(HelloWorld::DoClickTag)); CCMenu *pMenu = CCMenu::create(pMenuItem1, pMenuItem2, pMenuItem3, pMenuItem4, NULL); pMenu->alignItemsHorizontally(); pMenu->setPosition(ccp(240, 300)); pMenuItem1->setColor( ccc3( 255, 0, 0 )); pMenuItem2->setColor( ccc3( 0, 255, 0 )); pMenuItem3->setColor( ccc3( 0, 0, 255 )); pMenuItem4->setColor( ccc3( 0, 0, 0 )); pMenuItem1->setTag(1); pMenuItem2->setTag(2); pMenuItem3->setTag(3); pMenuItem4->setTag(4); this->addChild(pMenu); CCSprite* pWoman = CCSprite::create("Images/grossinis_sister1.png"); pWoman->setPosition( ccp(30, 200)); this->addChild( pWoman); mWoman = pWoman; return bRet; } º£Áö¾î Æ÷ÀÎÅ͸¦ ÁöÁ¤ÈÄ CCBezierBy·Î ¾×¼ÇÀ» »ý¼º ÈÄ ¾×¼ÇÀ» ½ÇÇàÇÑ´Ù. º£Áö¾î ½ÇÇà
void HelloWorld::DoClickTag(CCObject* pSender)
{ CCMenuItem *item = (CCMenuItem*)pSender; int n = item->getTag(); if(n == 1) //Bezier1 { ccBezierConfig bezier; bezier.controlPoint_1 = ccp(150, 100); bezier.controlPoint_2 = ccp(250, -100); bezier.endPosition = ccp(350, 0); CCActionInterval *action = CCBezierBy::create(3, bezier); mWoman->runAction(action); } if(n == 2) //Reverse { ccBezierConfig bezier; bezier.controlPoint_1 = ccp(150, 100); bezier.controlPoint_2 = ccp(250, -100); bezier.endPosition = ccp(350, 0); CCActionInterval *action = CCBezierBy::create(3, bezier); action = action->reverse(); mWoman->runAction(action); } if(n == 3) //Reset { //Reset mWoman->stopAllActions(); mWoman->setPosition( ccp( 30, 200)); mWoman->setRotation( 0.0f); mWoman->setScale( 1.0f); } if(n == 4) //Jump { CCActionInterval *action = CCJumpBy::create(2, ccp(400, 2), 50, 3); mWoman->runAction(action); } } º£Áö¾î °î¼± °æ·Î·Î ¿òÁ÷À϶§ Á¡À» °è¼Ó Âï¾îº¸ÀÚ. m_debugDraw·Î mWomanÀÇ À§Ä¡¸¦ °è¼Ó Âï´Â´Ù. ÀÌ·± µð¹ö±ë ÄÚµå´Â ¹èÆ÷½Ã¿¡´Â ¹Ýµå½Ã Á¦°Å µÇ¾î¾ß ÇÑ´Ù. Action µð¹ö±ë
void HelloWorld::draw()
{ __super::draw(); //µð¹ö±ëÀ» À§Çؼ ÀÌ·± Äڵ带 »ç¿ëÁßÀÌ´Ù. //¾Æ·¡ ÄÚµå·Î ÀÎÇؼ °è¼Ó Á¡À» Ãß°¡ÇÑ´Ù. ¹èÆ÷½Ã¿¡´Â Á¦°ÅÇØ¾ß ÇÑ´Ù. glPointSize(5); m_debugDraw->appendPoint( mWoman->getPosition(), 1, 0, 0); m_debugDraw->appendPoint( ccp(30, 200), 0, 0, 0); m_debugDraw->appendPoint( ccp(30 + 150, 200 + 100), 0, 0, 0); m_debugDraw->appendPoint( ccp(30 + 250, 200 - 100), 0, 0, 0); m_debugDraw->appendPoint( ccp(30 + 350, 200), 0, 0, 0); } DebugDraw °´Ã¼´Â tutorial09.htmlÀ» Âü°íÇÑ´Ù. |