天天看點

cocos2d-x學習筆記—圖檔按鈕

//
//  button.cpp
//  buttontest
//
//
//

#include "MyButtonScene.h"
#include "SimpleAudioEngine.h"

using namespace cocos2d;
using namespace CocosDenshion;
bool MyButton::init()
{

    if(!CCLayer::init())
    {
        return false;
    }
     CCSize size=CCDirector::sharedDirector()->getWinSize();   //獲得螢幕的大小
    CCMenuItemImage *menuImage1=CCMenuItemImage::create("CloseNormal.png", "CloseSelected.png", this,menu_selector(MyButton::menuCloseCallback1));
    menuImage1->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width-20,20));
    CCMenu *menu=CCMenu::create(menuImage1,NULL);
    menu->setPosition(CCPointZero);
    this->addChild(menu,2);
    CCSprite *nsprite=CCSprite::create("HelloWorld.png");
    nsprite->setPosition(ccp(size.width/2,size.height/2));
    this->addChild(nsprite,0);

    
    //CCLabelTTF *pttf=CCLabelTTF::create("hah", "Thonburi", 50);
    //pttf->setPosition(CCDirector::sharedDirector()->getWinSize().width/2,120);
    CCMenuItemFont *fontpttf=CCMenuItemFont::create("pttf",this,menu_selector(MyButton::menuCloseCallback1));
    this->addChild(fontpttf,1);
    this->setScale(0.5);
    
    //實作橫排列圖示及透明度切換
    for (int i=0; i<2; i++) {
    CCMenuItemImage *menuImage2=CCMenuItemImage::create("btn-about-normal.png", "btn-about-selected.png",this,menu_selector(MyButton::menuCloseCallback1));
    CCMenuItemImage *menuImage3=CCMenuItemImage::create("btn-highscores-normal.png", "btn-highscores-selected.png",this,menu_selector(MyButton::menuCloseCallback1));
    CCMenuItemImage *menuImage4=CCMenuItemImage::create("btn-play-normal.png", "btn-play-selected.png",menuImage2,menu_selector(MyButton::menuCloseCallback2));
    menuImage2->setTag(2); //添加标簽,以便後期調用
    menuImage2->setEnabled(false);//設定按鈕不可用

    CCMenu *menu2=CCMenu::create(menuImage2,menuImage3,menuImage4,NULL);
    CCSize size=CCDirector::sharedDirector()->getWinSize();
    menu2->setPosition(ccp(size.width/4, size.height/4));
    menu2->alignItemsHorizontally();
    menu2->setOpacity(128);  //設定透明度
    this->addChild(menu2,1,100+i);
    }
   

    //實作圖示的豎排排列
    CCMenuItemImage *menuImage8=CCMenuItemImage::create("btn-about-normal.png", "btn-about-selected.png",this,menu_selector(MyButton::menuCloseCallback3));
    CCMenuItemImage *menuImage9=CCMenuItemImage::create("btn-highscores-normal.png", "btn-highscores-selected.png",this,menu_selector(MyButton::menuCloseCallback4));
    CCMenuItemImage *menuImage10=CCMenuItemImage::create("btn-play-normal.png", "btn-play-selected.png",this,menu_selector(MyButton::menuCloseCallback5));
    CCMenu *menu4=CCMenu::create(menuImage8,menuImage9,menuImage10,NULL);
    menu4->alignItemsVerticallyWithPadding(200);
    //menu3->setPosition(ccp()
    menu4->setTag(20);
    this->addChild(menu4,1);
    
    //實作文字之間的切換(回調函數實作透明度的改變)
    CCMenuItemFont::setFontSize(34);
    CCMenuItemToggle *toggle= CCMenuItemToggle::createWithTarget(
                                                      this,
                                                      menu_selector(MyButton::menuCloseCallback1),CCMenuItemFont::create("on"),
                                                      CCMenuItemFont::create("off"),
                                                      NULL);
    toggle->setSelectedIndex(0);
    toggle->setPosition(ccp(size.width/4*3,size.height/4*3));
    CCMenu *menu5=CCMenu::create(toggle,NULL);
    this->addChild(menu5,2);
    
    
    
    //實作圖檔之間點選切換
    
    CCMenuItemImage *image1=CCMenuItemImage::create("btn-about-normal.png", "btn-about-selected.png");
    CCMenuItemImage *image2=CCMenuItemImage::create("btn-highscores-normal.png", "btn-highscores-selected.png");
    CCMenuItemImage *image3=CCMenuItemImage::create("btn-play-normal.png", "btn-play-selected.png");
    CCMenuItemToggle *togglee=CCMenuItemToggle::createWithTarget(this,
                                                                 menu_selector(MyButton::menuCallback),
                                                                 image1,
                                                                 image2,
                                                                 image3,
                                                                 NULL);
    
    CCMenu *ccmenuu=CCMenu::create(togglee,NULL);  //實作三者之間的順序切換
    ccmenuu->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width/2-120,CCDirector::sharedDirector()->getWinSize().height/2));
    this->addChild(ccmenuu,2);
    
    
    
    //精靈相關
    int idx=(int )(CCRANDOM_0_1()*1400/100);   //CCRANDOM_0_1()為系統定義的宏,實作産生0-1之間的随機數
    int x=(idx%5)*85;
    int y= (idx/5)*121;
    CCSprite *sprite=CCSprite::create("grossini_dance_atlas.png",CCRectMake(x, y, 85, 121));  //從圖檔中截取部分,構成精靈
    this->addChild(sprite,2);
    sprite->setPosition(ccp(size.width/2+70,size.height/2));
    CCActionInterval *newaction=CCMoveTo::create(13,ccp(size.width/2-120,size.height/2));  //設定動作,移動到指定位置
    sprite->runAction(CCRepeatForever::create(newaction));        //執行動作
    
    setTouchEnabled(true);          //設定接收觸摸事件
    CCSpriteBatchNode *batchsprite=CCSpriteBatchNode::create("grossini_dance_atlas.png", 50);  //設定精靈批處理,預計産生50個精靈
    this->addChild(batchsprite,2,11);
    batchsprite->setPosition(ccp(size.width/2,size.height/2));
    CCSprite *sprite1=CCSprite::createWithTexture(batchsprite->getTexture(),CCRectMake(x, y, 85, 121));
    CCSprite *sprite2=CCSprite::createWithTexture(batchsprite->getTexture(),CCRectMake(0, 0, 85, 121));
    this->addChild(sprite1);
    this->addChild(sprite2);
    sprite2->setPosition(ccp(size.width/2, size.height/2));
    //sprite1->
    CCActionInterval* action;
    float random = CCRANDOM_0_1();
    
    if( random < 0.20 )
        action = CCScaleBy::create(3, 2);
    else if(random < 0.40)
        action = CCRotateBy::create(3, 360);
    else if( random < 0.60)
        action = CCBlink::create(1, 3);
    else if( random < 0.8 )
        action = CCTintBy::create(2, 0, -255, -255);
    else
        action = CCFadeOut::create(2);
    //sprite1->runAction(action);
    CCFiniteTimeAction *actionback=CCSequence::create(action,action->reverse(),NULL);  //設定動作集合,順序依次執行
    sprite1->runAction(CCRepeat::create(actionback,6));       //重複6次執行動作
    
    CCActionInterval* action1=CCFadeIn::create(2);
    CCActionInterval* action2=CCJumpTo::create(2, CCPointMake(300, 0), 80, 5);
    sprite1->runAction(CCSequence::create(action1,action1->reverse(),NULL));
    sprite2->runAction(CCRepeatForever::create(action2));
    
    CCSprite *sprite3=CCSprite::create("grossini_dance_atlas.png",CCRectMake(0, 0, 85, 121));
    addChild(sprite3);
    CCPointArray *array=CCPointArray::create(20);   //建立點集合
    array->addControlPoint(ccp(0,0));
    array->addControlPoint(ccp(size.width/2-30,0));
    array->addControlPoint(ccp(size.width/2-30,size.height-80));
    array->addControlPoint(ccp(0,size.height-80));
    array->addControlPoint(ccp(0,0));
    CCCardinalSplineBy *action3=CCCardinalSplineBy::create(3 ,array, 2);  //在三秒内在這幾個點之間來回,最後一個參數為張力,1為正方形,大于1為内陷的正方形,小于1為外凸的正方形(内陷外凸是針對直線來說的)
    CCActionInterval *reverserv=action3->reverse();
    CCFiniteTimeAction *seq=CCSequence::create(action3,reverserv,NULL);
    sprite3->runAction(CCRepeat::create(seq,5));
    
    
    CCSprite *sprite4=CCSprite::create("grossini_dance_atlas.png",CCRectMake(0, 0, 85, 121));
    addChild(sprite4,2);
    CCAction *action4=CCSpawn::create(CCJumpBy::create(9,CCPointMake(300, 0) ,50 , 50),CCRotateBy::create(9, 720),NULL);//動作集合,同時執行
    sprite4->runAction(action4);
    
    return true;
    
}
void MyButton::menuCallback(CCLayer *pSender)
{
    
}
void MyButton::menuCloseCallback1(CCLayer *pSender)
{
    CCMenu* menu = (CCMenu*)(((CCNode*)(pSender))->getParent());
    GLubyte opacity = menu->getOpacity();
    if( opacity == 128 )
        menu->setOpacity(255);
    else
        menu->setOpacity(128);
}
void MyButton::menuCloseCallback2(CCLayer *pSender)
{
    CCMenuItemImage *image=(CCMenuItemImage*)pSender->getParent()->getChildByTag(2);
    if(image->isEnabled())
    {
        image->setEnabled(false);
    }
    else
    {
        image->setEnabled(true);

    }
}
void MyButton::menuCloseCallback3(CCLayer *pSender)
{
    float kwidth=pSender->getScale();
    if(kwidth<=1.0)
    {
        pSender->setScale(2*kwidth);
    }
    else
    {
        pSender->setScale(kwidth/2);
    }
}
void MyButton::menuCloseCallback4(CCLayer *pSender)
{
    float tmpskew=pSender->getSkewX();
    if(tmpskew==0)
    {
        pSender->setSkewX(-45);
    }
    else 
    {
        pSender->setSkewX(45);
       // pSender->setSkewY(0);
    }
    
}
void MyButton::menuCloseCallback5(CCLayer *pSender)
{
    
    CCMenuItemFont *newfont=CCMenuItemFont::create("點選繼續",(CCMenu*)pSender->getParent(),menu_selector(MyButton::menuCloseCallback6) );
    newfont->setColor(ccc3(255, 0, 0));
    newfont->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width/2,CCDirector::sharedDirector()->getWinSize().height/2));
    CCMenu *newmenu=CCMenu::create(newfont,NULL);
    this->addChild(newmenu,3);
    CCMenu *menu=(CCMenu*)pSender->getParent();
    menu->setEnabled(false);
    menu->setOpacity(128);
    
}
void MyButton::menuCloseCallback6(CCLayer *pSender)
{
    CCMenuItemFont *font=(CCMenuItemFont*)pSender;
    //font->setColor(ccc3(255, 255, 255));
    CCMenu *clicked=(CCMenu*)this->getParent()->getChildByTag(20);
    clicked->setOpacity(255);
    clicked->setEnabled(true);
    font->setVisible(false);
    //CCDirector::sharedDirector()->resume();
}
CCScene* MyButton::scene()
{
    CCScene *scene=CCScene::create();
    CCLayer *layer=MyButton::create();
    scene->addChild(layer);
    return scene;
}
void MyButton::menuCloseCallback(cocos2d::CCLayer *pSender)
{
    CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
    CCLog("點選過了");
}

bool mySprite::init()
{
    CCSize size=CCDirector::sharedDirector()->getWinSize();
    int idx=(int )(CCRANDOM_0_1()*1400/100);
    int x=(idx%5)*85;
    int y= (idx/5)*121;
    CCSprite *sprite=CCSprite::create("grossini_dance_atlas.png",CCRectMake(x, y, 85, 121));
    this->addChild(sprite,2);
    sprite->setPosition(ccp(size.width/2,size.height/2));
}

//歡迎轉載,轉載請注明出處:http://blog.csdn.net/somestill/article/details/9412111