●좌측 솔루션 탐색기에서 TestCpp을 디버그하면 cocos2d-x에 관한 여러가지 예제를 실행시켜 볼 수 있다.















Posted by -현's-

댓글을 달아 주세요



StageIdx.h


#ifndef __StageIdx__H__

#define __StageIdx__H__


#include "cocos2d.h"

//싱글톤 클래스

using namespace cocos2d;


class StageIdx : public cocos2d::CCLayer

{

public:

static StageIdx *getInstance();

void setStage2true();

bool getStage2Bool();


private:

StageIdx();

~StageIdx();

};


#endif  // __StageIdx__H__




StageIdx.cpp


#include "StageIdx.h"


StageIdx::StageIdx(void)

{

CCUserDefault::sharedUserDefault()->setBoolForKey("stage2",false);

CCUserDefault::sharedUserDefault()->flush();

}


StageIdx::~StageIdx(void)

{

}


static StageIdx *gameData;


StageIdx* StageIdx::getInstance()

{

if(!gameData)

{

gameData=new StageIdx();

}

return gameData;

}


bool StageIdx::getStage2Bool()

{

bool stage2= CCUserDefault::sharedUserDefault()->getBoolForKey("stage2");

return stage2;

}


void StageIdx::setStage2true(){

CCUserDefault::sharedUserDefault()->setBoolForKey("stage2",true);

CCUserDefault::sharedUserDefault()->flush();

}










Stage1Layer.h


#ifndef __Stage1Layer__H__

#define __Stage1Layer__H__


#include "cocos2d.h"


using namespace cocos2d;


class Stage1Layer : public cocos2d::CCLayer

{

public:

    virtual bool init();  


    static cocos2d::CCScene* scene();


    CREATE_FUNC(Stage1Layer);


bool jumpYN;


CCSprite *abc;


int score;

//void Stage1Layer::gameMenuStart(CCObject* sender);

void Stage1Layer::createDragon();


CCSprite* dragon;


void Stage1Layer::createBackground();

~Stage1Layer();

CCArray* stoneArray;

CCArray* coinArray;


CCLabelTTF* pLabel;


char coinScore[100];

void Stage1Layer::stoneCollision(float dt);

void Stage1Layer::coinCollision(float dt);


void Stage1Layer::winGame();


CCAction* rep;

void Stage1Layer::ccTouchesEnded(CCSet *pTouches, CCEvent* event);

};


#endif  // __Stage1Layer__H__




Stage1Layer.cpp


#include "Stage1Layer.h"

#include "StageIdx.h"

#include "WinLayer.h"

#include "LoseLayer.h"



CCScene* Stage1Layer::scene()

{

    CCScene *scene = CCScene::create();

    

    Stage1Layer *layer = Stage1Layer::create();

    

    // 960 x 640

    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    if (winSize.width >= 960) {

        layer->setScale(2.0);

        layer->setAnchorPoint(ccp(0.0, 0.0));

    }


    scene->addChild(layer);


    return scene;

}


bool Stage1Layer::init()

{

    if ( !CCLayer::init() )

    {

        return false;

    }

    

    /////////////////////////////

char coinScore[100] = {0};

score=0;

this->setTouchEnabled(true);

stoneArray=CCArray::createWithCapacity(4);

stoneArray->retain();


coinArray=CCArray::createWithCapacity(4);

coinArray->retain();

jumpYN=false;

CCTexture2D* texture1;

texture1=CCTextureCache::sharedTextureCache()->addImage("Images/white-512x512.png"); 

abc=CCSprite::createWithTexture(texture1, CCRectMake(0,0,20,10));

abc->setAnchorPoint(ccp(0,0));

abc->setColor(ccc3(255,255,0));

abc->setOpacity(255);

CCActionInterval* gogo = CCMoveBy::create(10, ccp(700, 0));

abc->runAction(gogo);



this->addChild(abc, 11);

this->createDragon();          //드래곤을 추가한다.

this->createBackground(); //배경 추가




this->schedule(schedule_selector(Stage1Layer::stoneCollision), 2.0f/60.0f);

this->schedule(schedule_selector(Stage1Layer::coinCollision), 2.0f/60.0f);



//레이블 생성 및 초기화

pLabel=CCLabelTTF::create("score:0", "Thonburi", 30);

       //레이블 내용은 HelloWorld이고 폰트는 Thonburi, 크기는 20이다.

//레이블 위치 지정

        pLabel->setPosition(ccp(90,50));

//레이블 색 지정

pLabel->setColor(ccc3(255,255,255));

        //흰색( ccc(255,255,255) )이 기본색이다. 

//레이블의 투명도 지정

pLabel->setOpacity(100.0);

//레이어에 레이블 객체 추가

this->addChild(pLabel, 12);


    return true;

}


Stage1Layer::~Stage1Layer()

{

stoneArray->release();

coinArray->release();

}



void Stage1Layer::stoneCollision(float dt){

CCObject *Obj;

CCLog("stoneCollisition");

CCARRAY_FOREACH(stoneArray, Obj){

CCSprite *stone=(CCSprite*)Obj;

if(255 == stone->getOpacity()){

int abcX = abc->getPositionX();

CCLog("stoneCollisition22222");

CCRect rectA=dragon->boundingBox();

int aa=rectA.getMinX();

int bb=rectA.getMinY();

CCLog("stoneCollisitionaaaa %d %d",aa,bb);

CCRect rectB=stone->boundingBox();

CCLog("stoneCollisitionbbbb");

int cc=rectB.getMinX()-abcX;

int dd=rectB.getMinY();

rectA.setRect(aa+30,bb,100,140);

rectB.setRect(cc,dd,20,10);

CCLog("stoneCollisitioncdcdcd %d %d",cc,dd);

if(rectA.intersectsRect(rectB)){

CCLog("stoneCollisition33333");

this->unscheduleAllSelectors();

CCScene* pScene=LoseLayer::scene();

CCDirector::sharedDirector()->replaceScene(pScene);//기존장면 없애고 새장면 교체

}

}

}

CCLog("stoneCollisition444");

}



void Stage1Layer::coinCollision(float dt){

CCObject *Obj;

CCLog("coinCollisition");

CCARRAY_FOREACH(coinArray, Obj){

CCSprite *coin=(CCSprite*)Obj;

if(255 == coin->getOpacity()){

int abcX = abc->getPositionX();

CCLog("coinCollisition22222");

CCRect rectA=dragon->boundingBox();

int aa=rectA.getMinX();

int bb=rectA.getMinY();

CCLog("coinCollisitionaaaa %d %d",aa,bb);

CCRect rectB=coin->boundingBox();

CCLog("coinCollisitionbbbb");

int cc=rectB.getMinX()-abcX;

int dd=rectB.getMinY();

rectA.setRect(aa+30,bb,100,140);

rectB.setRect(cc,dd,10,10);

CCLog("coinCollisitioncdcdcd %d %d",cc,dd);

if(rectA.intersectsRect(rectB)){

CCLog("coinCollisition33333");

score++;

sprintf(coinScore, "score: %d",score);

coin->setOpacity(0);

pLabel->setString(coinScore);

CCLog("Score %d",score);


}

}

}

CCLog("stoneCollisition444");

}



void Stage1Layer::createBackground()

{

//배경 스프라이트1

CCSprite* background1 = CCSprite::create("Images/game_background1.jpg");

background1->setAnchorPoint(ccp(0,0));

//배경 스프라이트2

CCSprite* background2 = CCSprite::create("Images/game_background2.jpg");

background2->setAnchorPoint(ccp(0,0));


//패럴랙스노드를 만든다.

CCParallaxNode* voidNode = CCParallaxNode::create();


//배경 스트라이트를 패럴랙스노드에 넣는다.

voidNode->addChild(background1, 1, ccp(1.0f, 0.0f), ccp(0,0));

voidNode->addChild(background2, 1, ccp(1.0f, 0.0f), ccp(480,0));


//장애물 추가

CCTexture2D* texture;

texture=CCTextureCache::sharedTextureCache()->addImage("Images/white-512x512.png");

for(int i=1; i<4;i++)

{

CCSprite* stone=CCSprite::createWithTexture(texture, CCRectMake(0,0,20,10));

stone->setAnchorPoint(ccp(0,0));

stone->setColor(ccc3(75,255,0));

voidNode->addChild(stone, 1, ccp(1.0f, 0.0f), ccp(i*250, 200));

stoneArray->addObject(stone);


}

//코인 추가

for(int i=1; i<4;i++)

{

CCSprite* coin=CCSprite::createWithTexture(texture, CCRectMake(0,0,20,10));

coin->setAnchorPoint(ccp(0,0));

coin->setColor(ccc3(255,255,0));

voidNode->addChild(coin, 1, ccp(1.0f, 0.0f), ccp(i*250, 300));

coinArray->addObject(coin);


}

//액션

CCActionInterval* go = CCMoveBy::create(10, ccp(-700, 0));

CCFiniteTimeAction* seq = CCSequence::create(go,

CCCallFunc::create(this, callfunc_selector(Stage1Layer::winGame)),   //끝까지 이동하면 winGame로 이동

NULL);


voidNode->runAction(seq);

this->addChild(voidNode);

}



void Stage1Layer::winGame(){

//winGame화면으로 이동

StageIdx::getInstance()->setStage2true();    //stage2를 열수있게 true로 바꾼다.

CCScene* pScene=WinLayer::scene();

CCDirector::sharedDirector()->replaceScene(pScene);//기존장면 없애고 새장면 교체

}








void Stage1Layer::createDragon()

{ //움직이는 용 추가

jumpYN=false;

CCTexture2D *texture=CCTextureCache::sharedTextureCache()->addImage("Images/dragon_animation.png");

CCAnimation *animation=CCAnimation::create();

animation->setDelayPerUnit(0.1);


for(int i=0; i<6; i++)

{

int index = i%4;

int rowIndex=i/4;


animation->addSpriteFrameWithTexture(texture, CCRectMake(index*130, rowIndex*140, 130, 140));

}

//스프라이트 생성

dragon=CCSprite::createWithTexture(texture, CCRectMake(0,0,130,140));

dragon->setPosition(ccp(100,240));

this->addChild(dragon,10);

dragon->setFlipX(true);


CCAnimate *animate=CCAnimate::create(animation);

CCAction* rep=CCRepeatForever::create(animate);

dragon->runAction(rep);

}


void Stage1Layer::ccTouchesEnded(CCSet *pTouches, CCEvent* event)

{

if(!jumpYN){          //현재 점프중이 아니면 해당 if문 실행

jumpYN=true;      //jumpYN을 true로 바꿔줌.


CCLog("TOUCH");


//추가

this->removeChild(dragon, true);  //

//추가end

//점프하면서 움직이는 용 추가

CCTexture2D *texture=CCTextureCache::sharedTextureCache()->addImage("Images/dragon_animation.png");

CCAnimation *animation=CCAnimation::create();

animation->setDelayPerUnit(0.1);


for(int i=0; i<6; i++)

{

int index = i%4;

int rowIndex=i/4;


animation->addSpriteFrameWithTexture(texture, CCRectMake(index*130, rowIndex*140, 130, 140));

}

//스프라이트 생성

dragon=CCSprite::createWithTexture(texture, CCRectMake(0,0,130,140));

dragon->setPosition(ccp(100,240));

this->addChild(dragon);

dragon->setFlipX(true);


CCAnimate *animate=CCAnimate::create(animation);

CCAction* rep=CCRepeatForever::create(animate);

CCActionInterval* jump=CCJumpBy::create(2.5, ccp(0,0),110, 1 );

CCFiniteTimeAction* spw=CCSpawn::create(jump,rep, NULL);

CCFiniteTimeAction* seq=CCSequence::create(spw,  

CCCallFuncND::create(this, callfuncND_selector(CCNode::removeChild), dragon), 

CCCallFunc::create(this, callfunc_selector(Stage1Layer::createDragon)), 

NULL);

dragon->runAction(seq);

}else{

//jumpYN이 true면 점프 실행 안함

}

}










●Stage2Layer - Stage1Layer 이랑 비슷함








WinLayer.h


#ifndef __WinLayer__H__

#define __WinLayer__H__


#include "cocos2d.h"


using namespace cocos2d;


class WinLayer : public cocos2d::CCLayerColor

{

public:

    virtual bool init();  


    static cocos2d::CCScene* scene();



    CREATE_FUNC(WinLayer);

void WinLayer::mainMenuGo(CCObject* sender);



};


#endif  // __WinLayer__H__




WinLayer.cpp


#include "WinLayer.h"

#include "MainMenuLayer.h"


CCScene* WinLayer::scene()

{

    CCScene *scene = CCScene::create();

    

    WinLayer *layer = WinLayer::create();

    

    // 960 x 640

    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    if (winSize.width >= 960) {

        layer->setScale(2.0);

        layer->setAnchorPoint(ccp(0.0, 0.0));

    }


    scene->addChild(layer);

    

    return scene;

}


bool WinLayer::init()

{

    if ( !CCLayerColor::initWithColor(ccc4(255,255,255,255)) )

    {

        return false;

    }

    

    /////////////////////////////

CCMenuItemFont *newGame=CCMenuItemFont::create("Win!!! Mene go", this, menu_selector(WinLayer::mainMenuGo));

newGame->setColor(ccc3(0,0,0));

CCMenu* menu=CCMenu::create(newGame,NULL);

menu->setPosition(ccp(240,180));

this->addChild(menu);


    return true;

}



void WinLayer::mainMenuGo(CCObject* sender)

{

CCScene* pScene=MainMenuLayer::scene();

CCDirector::sharedDirector()->replaceScene(pScene);

}










●LoseLayer.h


#ifndef __LoseLayer__H__

#define __LoseLayer__H__


#include "cocos2d.h"


using namespace cocos2d;


class LoseLayer : public cocos2d::CCLayerColor

{

public:

    virtual bool init();  


    static cocos2d::CCScene* scene();



    CREATE_FUNC(LoseLayer);

void LoseLayer::mainMenuGo(CCObject* sender);



};


#endif  // __LoseLayer__H__





●LoseLayer.cpp


#include "LoseLayer.h"

#include "MainMenuLayer.h"


CCScene* LoseLayer::scene()

{

    CCScene *scene = CCScene::create();

    

    LoseLayer *layer = LoseLayer::create();

    

    // 960 x 640

    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    if (winSize.width >= 960) {

        layer->setScale(2.0);

        layer->setAnchorPoint(ccp(0.0, 0.0));

    }


    scene->addChild(layer);

    

    return scene;

}


bool LoseLayer::init()

{

    if ( !CCLayerColor::initWithColor(ccc4(255,255,255,255)) )

    {

        return false;

    }

    

    /////////////////////////////

CCMenuItemFont *newGame=CCMenuItemFont::create("Lose...Mene go", this, menu_selector(LoseLayer::mainMenuGo));

newGame->setColor(ccc3(0,0,0));

CCMenu* menu=CCMenu::create(newGame,NULL);

menu->setPosition(ccp(240,180));

this->addChild(menu);


    return true;

}



void LoseLayer::mainMenuGo(CCObject* sender)

{

CCScene* pScene=MainMenuLayer::scene();

CCDirector::sharedDirector()->replaceScene(pScene);



}











Posted by -현's-

댓글을 달아 주세요



AppDelegate.h


#ifndef __APP_DELEGATE_H__

#define __APP_DELEGATE_H__


#include "cocos2d.h"


class  AppDelegate : private cocos2d::CCApplication

{

public:

    AppDelegate();

    virtual ~AppDelegate();

    virtual bool applicationDidFinishLaunching();


    virtual void applicationDidEnterBackground();


    virtual void applicationWillEnterForeground();

};


#endif  // __APP_DELEGATE_H__

 





AppDelegate.cpp


#include "cocos2d.h"

#include "AppDelegate.h"

#include "LoadingLayer.h"


USING_NS_CC;


AppDelegate::AppDelegate()

{

}


AppDelegate::~AppDelegate()

{

}


bool AppDelegate::applicationDidFinishLaunching()

{

    // initialize director

    CCDirector *pDirector = CCDirector::sharedDirector();

    pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());


    // turn on display FPS

    pDirector->setDisplayStats(false);


    // set FPS. the default value is 1.0/60 if you don't call this

    pDirector->setAnimationInterval(1.0 / 60);


    // create a scene. it's an autorelease object

    CCScene *pScene = LoadingLayer::scene();


    // run

    pDirector->runWithScene(pScene);

    return true;

}


// This function will be called when the app is inactive. When comes a phone call,it's be invoked too

void AppDelegate::applicationDidEnterBackground()

{

    CCDirector::sharedDirector()->stopAnimation();


}


// this function will be called when the app is active again

void AppDelegate::applicationWillEnterForeground()

{

    CCDirector::sharedDirector()->startAnimation();


}

 









LoadingLayer.h


#ifndef _LoadingLayer_

#define _LoadingLayer_


#include "cocos2d.h"


using namespace cocos2d;


class LoadingLayer:public cocos2d::CCLayer

{

public:

virtual bool init();


static cocos2d::CCScene* scene();


CREATE_FUNC(LoadingLayer);


//이후 변수와 메서드 추가 선언


CCSize winSize;


bool isLoading;

bool imagesLoaded;


CCSprite *defaultImage;

CCSprite *main_bkgrnd;

CCSprite *tapToCont;

CCSprite *loading;


void spritesLoaded();

void tick(float dt);

virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent* event);

};


#endif





LoadingLayer.cpp


#include "LoadingLayer.h"

#include "MainMenuLayer.h"


CCScene* LoadingLayer::scene()

{

    CCScene *scene = CCScene::create();

    

    LoadingLayer *layer = LoadingLayer::create();

    

    // 960 x 640

    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    if (winSize.width >= 960) {

        layer->setScale(2.0);

        layer->setAnchorPoint(ccp(0.0, 0.0));

    }


    scene->addChild(layer);

    

    return scene;

}


bool LoadingLayer::init()

{

    if ( !CCLayer::init() )

    {

        return false;

    }

    

    /////////////////////////////

    

    // 변수 초기화

    isLoading = true;

    imagesLoaded = false;

    // 터치 활성화

    this->setTouchEnabled(true);


    // 화면 사이즈 구하기

    winSize = CCSizeMake(480, 320);


    // 디폴트 이미지 세로형 화면에 추가하기

    defaultImage = CCSprite::create("Images/loading_bg.png");

    defaultImage->setPosition(ccp(winSize.width/2, winSize.height/2));

    this->addChild(defaultImage);


LoadingLayer::spritesLoaded();

    // 주기적으로 상태체크

    this->schedule(schedule_selector(LoadingLayer::tick));

  

    return true;

}


void LoadingLayer::spritesLoaded()

{

CCLog("11");

    // 메인 백그라운드 이미지 추가

    main_bkgrnd = CCSprite::create("Images/loading_bg.png");

    main_bkgrnd->setPosition( ccp(winSize.width/2, winSize.height/2) );

    this->addChild(main_bkgrnd);

    

    // "Loading..." 글자 이미지 추가

    loading = CCSprite::create("Images/loading_tx.png");

    loading->setPosition( ccp(350,50));

    this->addChild(loading);


    

    // "Loading..." 글자 이미지 깜박이게 애니메이션

    CCFiniteTimeAction* loadingSeqAct = CCSequence::create(CCFadeOut::create(1.0f),

                                                           CCFadeIn::create(1.0f),

                                                           NULL);

    CCAction* rep2 = CCRepeatForever::create((CCActionInterval*)loadingSeqAct);

    loading->runAction(rep2);


    

    // 시작할 때 로딩한 디폴트 이미지를 지운다. (메모리 절약)

    this->removeChild(defaultImage, true);

    

    

    // 이미지가 다 로드되었음을 표시

    imagesLoaded = true;


}


void LoadingLayer::tick(float dt)

{

    

    // 이미지가 다 로드됨

    if (imagesLoaded && isLoading) {

        

        isLoading = false;

        

        // "로딩중 이미지"를 삭제. (메모리 절약)

        this->removeChild(loading, true);

        

        // continue 이미지 추가

        tapToCont = CCSprite::create("Images/continue_tx.png");

        tapToCont->setPosition( ccp(350,50 ));

        this->addChild(tapToCont);

       

        // continue 깜박거림

        // 로딩중 자리에서 대신 나오며 다음 신으로 갈 수 있도록 안내 표시.

        CCFiniteTimeAction* loadingSeqAct = CCSequence::create(CCFadeOut::create(1.0f),

                                                               CCFadeIn::create(1.0f),

                                                               NULL);

        CCAction* rep2 = CCRepeatForever::create((CCActionInterval*)loadingSeqAct);

        tapToCont->runAction(rep2);

    }

    

}


void LoadingLayer::ccTouchesEnded(CCSet *pTouches, CCEvent* event)

{

    if (!isLoading) {

        // 클릭하면 메인메뉴 신으로 이동

       CCScene* pScene = MainMenuLayer::scene();

        CCDirector::sharedDirector()->replaceScene( CCTransitionProgressRadialCW::create(0.5f, pScene) );

    }

}











MainMenuLayer.h


#ifndef __MainMenuLayer__H__

#define __MainMenuLayer__H__


#include "cocos2d.h"


using namespace cocos2d;


class MainMenuLayer : public cocos2d::CCLayerColor

{

public:

    virtual bool init();  


    static cocos2d::CCScene* scene();



    CREATE_FUNC(MainMenuLayer);


void MainMenuLayer::newGameStart(CCObject* sender);



};

#endif  // __MainMenuLayer__H__





MainMenuLayer.cpp


#include "MainMenuLayer.h"

#include "StageSelect.h"


CCScene* MainMenuLayer::scene()

{

    CCScene *scene = CCScene::create();

    

    MainMenuLayer *layer = MainMenuLayer::create();

    

    // 960 x 640

    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    if (winSize.width >= 960) {

        layer->setScale(2.0);

        layer->setAnchorPoint(ccp(0.0, 0.0));

    }


    scene->addChild(layer);

    

    return scene;

}


bool MainMenuLayer::init()

{

    if ( !CCLayerColor::initWithColor(ccc4(255,255,255,255)) )

    {

        return false;

    }

    

    /////////////////////////////

CCSize winSize=CCSizeMake(480, 320);


CCMenuItemFont *newGame=CCMenuItemFont::create("newGame", this, menu_selector(MainMenuLayer::newGameStart));

newGame->setColor(ccc3(0,0,0));

CCMenu* menu=CCMenu::create(newGame,NULL);

menu->setPosition(ccp(winSize.width/2, winSize.height/2));

this->addChild(menu);


    return true;

}


void MainMenuLayer::newGameStart(CCObject* sender)

{

CCScene* pScene=StageSelect::scene();

CCDirector::sharedDirector()->replaceScene(pScene);



}









●StageSelect.h


#ifndef __StageSelect__H__

#define __StageSelect__H__


#include "cocos2d.h"


using namespace cocos2d;


class StageSelect : public cocos2d::CCLayerColor

{

public:

    virtual bool init();  


    static cocos2d::CCScene* scene();


    CREATE_FUNC(StageSelect);

void StageSelect::doClick(CCObject* pSender);

void StageSelect::doClickX(CCObject* pSender);

bool stage2;

};

#endif  // __StageSelect__H__




●StageSelect.cpp


#include "StageSelect.h"

#include "MainMenuLayer.h"

#include "StageIdx.h"

#include "Stage1Layer.h"

#include "Stage2Layer.h"



CCScene* StageSelect::scene()

{

    CCScene *scene = CCScene::create();

    

    StageSelect *layer = StageSelect::create();

    

    // 960 x 640

    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    if (winSize.width >= 960) {

        layer->setScale(2.0);

        layer->setAnchorPoint(ccp(0.0, 0.0));

    }


    scene->addChild(layer);

    

    return scene;

}


bool StageSelect::init()

{

    if ( !CCLayerColor::initWithColor(ccc4(255,255,255,255)) )

    {

        return false;

    }

    

    /////////////////////////////


stage2 = StageIdx::getInstance()->getStage2Bool();

//stage1

CCMenuItemFont *item1=CCMenuItemFont::create("Stage1 O", this, menu_selector(StageSelect::doClick ));

item1->setColor(ccc3(0,0,0));


//stage2

std::string a;

if(stage2)

{

a="Stage2 O ";

}else{

a="String2 X ";

}

CCMenuItemFont *item2=CCMenuItemFont::create(a.c_str(), this, menu_selector(StageSelect::doClick ));

item2->setColor(ccc3(0,0,0));

/*

//stage2

if(stage2)

{

CCMenuItemFont *item2=CCMenuItemFont::create("Stage2 O", this, menu_selector(StageSelect::doClick ));

item2->setColor(ccc3(0,0,0));

}else{

CCMenuItemFont *item2=CCMenuItemFont::create("Stage2 X", this, menu_selector(StageSelect::doClickX ));

item2->setColor(ccc3(0,0,0));

}

*/

//stage3_MainMenu

CCMenuItemFont *item3=CCMenuItemFont::create("Menu", this, menu_selector(StageSelect::doClick ));

item3->setColor(ccc3(0,0,0));

CCMenu* pMenu=CCMenu::create(item1, item2, item3, NULL);

item1->setTag(1);

item2->setTag(2);

item3->setTag(3);


pMenu->alignItemsVertically();

this->addChild(pMenu);

//bool값 테스트

if(stage2)

{

CCLog("Stage2 O 11");

}else{

CCLog("Stage2 X  11111");

}


    return true;

}

//bool 값 


void StageSelect::doClick(CCObject* pSender){


//bool값 테스트

if(stage2)

{

CCLog("Stage2 O 2222");

}else{

CCLog("Stage2 X  2222");

}


CCMenuItem *titem=(CCMenuItem*)pSender;

int i=titem->getTag();


//bool 테스트

if(stage2)

{

CCLog("Stage2 O 3333");

}else{

CCLog("Stage2 X  3333");

}


switch(i){

case 1:

{

CCScene* pScenes=Stage1Layer::scene();

CCDirector::sharedDirector()->replaceScene(pScenes);

break;

}

case 2:

{

if(stage2){

CCScene* pScenes=Stage2Layer::scene();

CCDirector::sharedDirector()->replaceScene(pScenes);

CCLog("stage2 o rrrr");

break;


}else{

CCLog("stage2 x rrrr");

break;

}

}


case 3:

{

CCScene* pScene=MainMenuLayer::scene();

CCDirector::sharedDirector()->replaceScene(pScene);

break;

}


}//switch end




}


void StageSelect::doClickX(CCObject* pSender){


}











Posted by -현's-

댓글을 달아 주세요


●터치하면 캐릭터가 점프하고 장애물을 피하는 게임이다. 장애물에 충돌하면 패배화면으로 넘어간다. 코인에 충돌하면 스코어가 오른다.







●구조






●파일, 리소스 목록








●파일 목록


AppDelegate


LoadingLayer - 로딩 화면


MainMenuLayer - 메인 메뉴 화면


StageSelect - 스테이지 선택 화면


Stage1Layer - 스테이지1 


Stage2Layer - 스테이지2


StageIdx - 스테이지1을 깨야 스테이지2가 선택되도록 처리하기 위한 싱글톤 클래스를 구현


WinLayer - 승리화면


LoseLayer - 패배화면







●동영상










Posted by -현's-

댓글을 달아 주세요

●웹표준 레이아웃

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>

 

<style type="text/css">
body,div,ul,li,dl,dt,dd,ol,p,h1,h2,h3,h4,h5,h6,form{margin:0; padding:0}
body{font:normal dotum, '돋움';}
ul,il,dl{list-style:none}
img{border:0; vertical-align:top;}
ul{list-style:none; padding:0; margin:0;}

 

#wrap{margin:0; auto; width:900px;  }
#header{float:left; width:900px; height:145; margin-bottom:15px;}
#sidebar{float:left; width:245px;}
#content{float:right; width:645px;}
#footer{float:left; width:900px; margin-top:20px;}
</style>

 

</head>
<body>

 

<div id="wrap">
  <div id="header">a</div>
  <div id="sidebar">b</div>
  <div id="content">c</div>
  <div id="footer">d</div>
</div>

 

</body>
</html> 

 

 

●#wrap{margin:0 auto; width:900px;}

- table에서는 align="center"로 중앙 정렬을 했지만, 웹표준에서는 따로 중앙정렬은 없다. 그래서 중앙정렬을 하려면 가장 바깥 div에 'margin:0 auto'를 선언해 준다. 'margin:0'은 상하 0px라는 뜻이고 'auto'는 좌우를 중앙에 위치하게 한다.

 

 

 

●큰 div(wrap,header,sidebar,content,footer 등)를 만들고 그 안에 세부적인 div를 만든다. 큰 div는 height값을 주지 않고 세부적인 div에 height를 준다.

 

 

 

●width, margin, padding, height 수치를 정확히 계산해서 레이아웃을 만든다. 만들 레이아웃 디자인을 프린트하고 계산기로 위의 값을 계산하면서 하면 편하다.

 

 

 

●margin은 바깥쪽 여백, padding는 안쪽 여백이다.

 

 

 

●padding값은  width값에 포함하지 않는다. 계산할때 따로 더해주어야 한다.

ex)

<div style="padding:10px; width:80px; height:80px;"></div>

여기서 총 길이는 width값 80px와 양쪽 padding값 10px+10px인 100px이다.

 

 

 

●값에 숫자만 쓰면 안되고 px등 단위를 써주어야한다.

 

 

 

●div에 테두리를 사용하려면 'border:1px solid ;border-color:blue;' 를 css에 입력한다.

ex)

#header{float:left; width:900px; height:145px; border:1px solid ; border-color:blue; margin-bottom:15px; }

 

 

 

●연습 예

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>

<style type="text/css">
/* 공통 속성 */
body,div,ul,li,dl,dt,dd,ol,p,h1,h2,h3,h4,h5,h6,form{margin:0; padding:0}
body{font:normal dotum, '돋움';}
ul,il,dl{list-style:none}
img{border:0; vertical-align:top;}
ul{list-style:none; padding:0; margin:0;}
/* 큰 div */
#wrap{margin:20px auto; width:900px;  }
#header{float:left; width:900px; height:145px; background:green; margin-bottom:15px; }
#sidebar{float:left; width:245px;}
#content{float:right; width:645px;}
#footer{float:left; width:900px; height:80px; background:green; margin-top:15px; margin-bottom:30px;  }
/* sidebar 세부 div */
#sidebar_a{width:250px ;height:150px ;background:green; margin-bottom:10px;  }
#sidebar_b{width:250px ;height:160px ;background:green; margin-bottom:10px; }
#sidebar_c{width:230px ;height:300px ;background:green; padding:10px;  }
#sidebar_c_1{width:230px ;height:145px ;background:yellow; margin-bottom:10px; }
#sidebar_c_2{width:230px ;height:145px ;background:yellow; }
/* content 세부 div */
#content_a{width:625px ; background:green ;margin-bottom:10px; padding:10px;  }
#content_a_1{width:625px ;height:90px ;background:yellow ;margin-bottom:10px;  }
#content_a_2{width:625px ;height:90px ;background:yellow; ;margin-bottom:10px ; }
#content_a_3{width:625px ;height:100px ;background:yellow; ; }
#content_b{width:645px ;height:150px ;background:green ;margin-bottom:10px ; }
#content_c{width:645px ;height:160px ;background:green ; }

</style>

</head>
<body>

<div id="wrap">
 <div id="header"></div>
 <div id="sidebar">
  <div id="sidebar_a"></div>
  <div id="sidebar_b"></div>
  <div id="sidebar_c">
   <div id="sidebar_c_1"></div>
   <div id="sidebar_c_2"></div>  
  </div> 
 </div> 
 <div id="content">
  <div id="content_a">
   <div id="content_a_1"></div>
    <div id="content_a_2"></div>
    <div id="content_a_3"></div>
  </div> 
  <div id="content_b"></div>
  <div id="content_c"></div> 
 </div>
 <div id="footer"></div>
</div>

</body>
</html>

 

 

 

 

Posted by -현's-

댓글을 달아 주세요

●형태

<style type="text/css">

#wrap{width:1000px;}

#header{width:1000px; float:left;}

#sidebar{width:300px; float:left;}

#content{width:700px; float:left;}

#footer{width:1000px; float:left;}

</style>

 

<div id="wrap">

<div id="header">header</div>
<div id="sidebar">sidebar</div>
<div id="content">content</div>
<div id="footer">footer</div>

</div> 

 

 

 

●html의 <div>와 css로 레이아웃 구성하기 예 

 

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>

 

<style type="text/css">
#wrap{width:1000px; height:800px; background:blue;}
#header{width:900px; height:130px; margin-left:50px; margin-bottom:10px; background:yellow;}
#middle{width:1000px; float:left; background:black;}
#sidebar{width:200px;height:500px; float:left; margin-left:50px; margin-right:10px; background:gray;}
#content{width:700px; height:500px;float:left; background:red;}
#footer{width:900px; height:130px; float:left; margin-left:50px; margin-top:10px; background:orange;}
</style>

 

</head>
<body>


<div id="wrap">
   <div id="header">header</div>
   <div id="middle">
       <div id="sidebar">sidebar</div>
       <div id="content">content</div>
   </div>
   <div id="footer">footer</div>
</div>


</body>

</html>

 

 

wrap - 레이아웃 전체를 묶어서 wrap안에 있는 div들이 깨지지 않고 자리를 잘 잡게 하기 위한 테두리이다.

header - 넓이값과 float으로 위치를 잡아주면 된다.

sidebar, content - sidebar와 content의 합은 레이아웃 전체 크기보다 클수 없다.

footer - footer에도 float값을 주어야한다. float값을 주지 않으면 비ie브라두저에서 레이아웃이 깨져나올수 있다.

 

 

●보통 실무에서는 css코드는 html코드안에 삽입하지 않고 따로 css파일을 만들어서 사용한다.

 

 

●과거에는 html의 <table>태그를 사용하여 레이아웃을 구성하였지만 웹표준을 준수하려면<table>태그보다는 <div>로 레이아웃을 구성하는 것을 추천한다.

 

 

 

 

Posted by -현's-

댓글을 달아 주세요

 

●퀵정렬(Quick sort)

- 어느 한 값을 기준으로 이 값보다 작은값을 갖는 데이터와 큰 값을 갖은 데이터를 분리하여 2개의 그룹으로 나눈다. 그리고나서 각 그룹에 대해 위 작업을 재귀적으로 반복해서 정렬한다. 다른 정렬보다 평균적인 실행시간이 빠르다.

 

●퀵정렬 코드( 제대로 정렬이 안됨, 나중에 수정)

 

#include<stdio.h>
#include<stdlib.h>


int i, n = 10, data[10] = {3, 7, 8, 2, 9, 1, 4, 7, 6, 5};

void quick(int array[], int left, int right)
{
 int choice;
 int i, j, temp;
 if(left<right)
 {
  choice = array[left];           //기준이 되는 값을 정한다.

  i=left+1;
  j=right;

  while(1)
  {
   while(array[i]<choice)
    i++;
   while(array[j]>choice)
    j--;
   if(i>=j)                    //교환할 데이터가 없으면 break
    break;
   temp=array[i];
   array[i]=array[j];
   array[j]=temp;
   if(array[i]==choice && array[j]==choice)
   {
    i++;
    j--;
   }
  }
  temp=array[j];
  array[j]=array[left];
  array[left]=temp;
  quick(array, left, j-1);
  quick(array, j+1, right);
 }
}


void output(){
 for(i=0;i<n;i++)
 {
  printf("%d ", data[i]);
 }
 printf("\n");
}


int main()
{
 output();
 quick(data, 0, n-1);
 output();
 return 0;
}

Posted by -현's-

댓글을 달아 주세요

 

●삽입정렬(Insert sort)

- 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다. 배열이 길수록 효율은 떨어진다.

출처 - 위키백과

 

●삽입정렬 코드

 #include<stdio.h>

int i, n=10, data[10] = {30,5, 32,11, 98, 34, 12, 54, 32, 543};

void insert(int array[], int n)
{
 int temp, k;
 temp = k = 0;

 for(i=1; i<n; i++)
 {
  temp = array[i];
  k=i-1;
  while(k>=0 && array[k]>temp)
  {
   array[k+1] = array[k];
   k--;
   array[k+1] = temp;
  }
 }
}

void output()
{
 for(i=0; i<n; i++)
 {
  printf("%d ", data[i]);
 }
 printf("\n");
}

int main()
{
 output();
 insert(data, n);
 output();
 return 0;
}

 

 

 

Posted by -현's-

댓글을 달아 주세요

 

●버블정렬(Bubble sort)

- 인접한 두개의 데이터의 값을 비교해서 정렬되어 있지 않으면 교환하는 정렬이다. 이런방법으로  마지막까지 비교하고 교환하면 한 단계가 끝난다. 그리고나서 2번째 데이터부터 다시 두개의 데이터의 값을 비교해 나가면서 비교한다. 다른 정렬에 비해 정렬 속도는 느리지만 코드는 단순하다.

 

●버블정렬 코드

 #include<stdio.h>


int i;
int n=10;                                         //n은 데이터 개수
int data[10]={30,40,20,10,43,12,54,87,34,1};

void bubble(int array[], int n)
{
 int i, j, temp;
 for(i=0;i<n;i++)
 {
  for(j=0;j<n-i-1;j++)
  {
   if(array[j] > array[j+1])            //i번째 데이터와 j+1번재 데이터를 비교해서 j+1번째 데이터가 크면 교환
   {
    temp = array[j];
    array[j] = array[j+1];
    array[j+1] = temp;
   }
    
  }
 }
 
}


void output()
{
 for(i=0; i< n; i++)
 {
  printf("%d ",data[i]);
 }
 printf("\n");
}


int main()
{
 output();
 bubble(data,n);
 output();
 return 0;
}

 


 

 

 

 

Posted by -현's-

댓글을 달아 주세요