레이블이 Cocos2d-x인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Cocos2d-x인 게시물을 표시합니다. 모든 게시물 표시

2014년 4월 10일 목요일

cocos2d-x rc1 create project(os x)

Terminal을 실행하고 cocos2d-x rc1폴더로 이동하여 setup.py를 실행

1. cd [cocos2d-x rc1경로]
2. ./setup.py

다음은 프로젝트 생성 명령이이다.
cocos new [project_name] -p [package_name] -l cpp -d [project_path]

2014년 4월 2일 수요일

cocos2d-x Keypad 자동 열기





EditBox가 포함된 Scene을 열었을 때, 특정 EditBox를 터치 하지 않은 상태에서 해당 EditBox에 입력할 수 있게 키보드가 자동으로 열리도록 하는 방법.

cocos2d-x 3.0 rc0
/extensions/GUI/CCEditBox/하위의 CCEditBox.h, CCEditBox.cpp에 다음과 같은 코드를 추가한다.

CCEditBox.h
void openKeyboard();

CCEditBox.cpp
void EditBox::openKeyboard()
{
      _editBoxImpl->openKeyboard();
}

그리고 위 메서드를 적용하려는 Scene에서 호출하면 도니다.

예 : editbox->openKeyboard()

2014년 3월 18일 화요일

Layer parameters for initializing 레이어에 파라미터 넘겨주는 방법 - cocos2d-x 3.0

HomeScene에 파라미터가 포함된 HomeLayer를 추가하는 방법

HomeScene.h
#ifndef __Fortune__HomeScene__
#define __Fortune__HomeScene__

#include "cocos2d.h"

class HomeScene:public cocos2d::Scene
{
public:
    static cocos2d::Scene* createScene();
};

#endif

HomeScene.cpp
#include "HomeScene.h"
#include "HomeLayer.h"

cocos2d::Scene* HomeScene::createScene()
{
    auto scene = cocos2d::Scene::create();
    auto layer = HomeLayer::createWithScenetype(2);
    
    scene->addChild(layer);
    
    return scene;
}




HomeLayer.h
#include "cocos2d.h"
class HomeLayer:public cocos2d::Layer
{
public:
    static cocos2d::Layer* createWithScenetype(int st);
    bool init(int st);

private:
    int _type;    
};


HomeLayer.cpp
#include "HomeLayer.h"
Layer* HomeLayer::createWithScenetype(int st)
{
    auto layer = new HomeLayer();
    if (layer && layer->init(st))
    {
        layer->autorelease();
        return layer;
    }
    return NULL;
}

bool HomeLayer::init(int st)
{
    if (!Layer::init())
    {
        return false;
    }
    
    _type = st;
    
    log("scene type : %d", _type);
    }
    
    return true;
}

2013년 12월 19일 목요일

Cocos2d-x에서 EditBox사용하기



1. EditBox사용할 Layer의 Head를 다음과 같이 설정한다.


#ifndef __ProjectName__MemberLayer__
#define __ProjectName__MemberLayer__

#include "Common.h"
#include "cocos-ext.h" // EditBox사용을 위한 추가

USING_NS_CC_EXT; // EditBox사용을 위한 추가

// CCEditBoxDelegate 추가
class MemberLayer:public CCLayer, public CCEditBoxDelegate
{
public:
    virtual bool init();
    
    static CCScene* scene();
    
    CREATE_FUNC(MemberLayer);
    ///////////////////////////////////////////////////////////////
    // EditBox사용을 위한 추가 시작
    ///////////////////////////////////////////////////////////////
    virtual void editBoxEditingDidBegin(CCEditBox* editBox);
    virtual void editBoxEditingDidEnd(CCEditBox* editBox);
    virtual void editBoxTextChanged(CCEditBox* editBox, const std::string& text);
    virtual void editBoxReturn(CCEditBox* editBox);
    ///////////////////////////////////////////////////////////////
    // EditBox사용을 위한 추가 끝
    ///////////////////////////////////////////////////////////////
private:
    void PrepareResources();// 본 페이지에서 사용할 리소스 로드
    void StartLayout();     // 전체 레이아웃 구성
    void PrepareEditBox();  // 이름, 생년월일, 비밀번호 입력 텍스트박스 생성
    
    CCSpriteBatchNode* batchNode;
    
    CCEditBox* Name;        // 이름을 입력할 텍스트박스
    CCEditBox* Birth;       // 생년월일을 입력할 텍스트박스
    CCEditBox* Pwd;         // 비밀번호를 입력할 텍스트박스
};

#endif /* defined(__ProjectName__MemberLayer__) */

2. cpp 파일

#pragma mark -
#pragma mark EditBox
void MemberLayer::PrepareEditBox()
{
    /*****************************************************************
     * 이름 필드
     ****************************************************************/
    Name = CCEditBox::create(CCSizeMake(300, 50), CCScale9Sprite::createWithSpriteFrameName("editBox_bg_normal.png"));
    Name->setPosition(Common::centerPoint());
    Name->setFontColor(ccRED);
    Name->setPlaceHolder("Name");
    Name->setPlaceholderFontColor(ccWHITE);
    Name->setReturnType(kKeyboardReturnTypeDefault);
    Name->setInputMode(kEditBoxInputModeAny);
    Name->setTag(1);
    Name->setDelegate(this);
    this->addChild(Name);
    
    /*****************************************************************
     * 생년월일 필드
     ****************************************************************/
    Birth = CCEditBox::create(CCSizeMake(300, 50), CCScale9Sprite::createWithSpriteFrameName("editBox_bg_complete.png"));
    Birth->setPosition(ccpAdd(Name->getPosition(), ccp(0, 100)));
    Birth->setFontColor(ccRED);
    Birth->setInputMode(kEditBoxInputModePhoneNumber);
    Birth->setDelegate(this);
    this->addChild(Birth);
    /*****************************************************************
     * 비밀번호 필드
     ****************************************************************/
    Pwd = CCEditBox::create(CCSizeMake(300, 50), CCScale9Sprite::createWithSpriteFrameName("editBox_bg_error.png"));
    Pwd->setPosition(ccpAdd(Birth->getPosition(), ccp(0, 100)));
    Pwd->setFontColor(ccRED);
    Pwd->setInputMode(kEditBoxInputModePhoneNumber);
    Pwd->setTag(3);
    Pwd->setReturnType(kKeyboardReturnTypeDone);
    Pwd->setInputFlag(kEditBoxInputFlagPassword);
    Pwd->setDelegate(this);
    this->addChild(Pwd);
}


#pragma mark -
#pragma mark EditBox Virtual Methods
void MemberLayer::editBoxEditingDidBegin(cocos2d::extension::CCEditBox *editBox)
{
    // EditBox편집이 시작될 때 발생하는 이벤트
}
void MemberLayer::editBoxEditingDidEnd(cocos2d::extension::CCEditBox *editBox)
{
    // EditBox편집이 끝날 때 발생하는 이벤트
}
void MemberLayer::editBoxTextChanged(cocos2d::extension::CCEditBox *editBox, const std::string &text)
{
    // EditBox내 Text가 변경될 때 발생하는 이벤트
}
void MemberLayer::editBoxReturn(cocos2d::extension::CCEditBox *editBox){}

EditBoxInputMode (EX) setInputMode(kEditBoxInputModeAny))

  1. kEditBoxInputModeAny = 0,
  2. kEditBoxInputModeEmailAddr,
  3. kEditBoxInputModeNumeric,
  4. kEditBoxInputModePhoneNumber,
  5. kEditBoxInputModeUrl,
  6. kEditBoxInputModeDecimal,
  7. kEditBoxInputModeSingleLine


EditBoxInputFlagType (EX) setInputFlag(kEditBoxInputFlagPassword))

  1. kEditBoxInputFlagPassword = 0,
  2. kEditBoxInputFlagSensitive,
  3. kEditBoxInputFlagInitialCapsWord,
  4. kEditBoxInputFlagInitialCapsSentence,
  5. kEditBoxInputFlagInitialAllCharacters

KeyboardReturnType (EX) setReturnType(kKeyboardReturnTypeSend))

  1. kKeyboardReturnTypeDefault = 0,
  2. kKeyboardReturnTypeDone,
  3. kKeyboardReturnTypeSend,
  4. kKeyboardReturnTypeSearch,
  5. kKeyboardReturnTypeGo

2013년 12월 4일 수요일

자식 Sprite를 포함한 사용자 정의 CCSprite - cocos2d-x


  • 자식 Sprite를 포함하는 사용자 정의 CCSprite를 정의
  •  멤버함수 Showchild를 통해 자식 Sprite의 상태(Position, Visible 등)를 제어


CustomSprite.h
#ifndef __Fortune__CustomSprite__
#define __Fortune__CustomSprite__

#include "Common.h"

class CustomSprite:public CCSprite
{
public:
    CustomSprite();
    ~CustomSprite();
    static CustomSprite* create(CCSpriteBatchNode* batchNode, int Type);
    
    void showBag();
    
private:
    static const char* fileName(int Type);
};

#endif /* defined(__Fortune__CustomSprite__) */

CustomSprite.cpp
#include "CustomSprite.h"

CustomSprite::CustomSprite(){}
CustomSprite::~CustomSprite(){}

CustomSprite* CustomSprite::create(CCSpriteBatchNode* batchNode, int Type)
{
    CCSpriteFrame* frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(fileName(Type));
    
    CustomSprite* custom = new CustomSprite();
    if (custom && custom->initWithSpriteFrame(frame))
    {
        batchNode->addChild(custom, 1);
        
        ///////////////////////////////////////////////////////////////
        // 자식 스프라이트 추가
        ///////////////////////////////////////////////////////////////
        CCSprite* child = CCSprite::createWithSpriteFrameName("child.png");
        child->setTag(1);
        child->setPosition(ccp(142.0f, 75.0f));
        custom->addChild(child, -1); // 자식 스프라이트를 부모 스프라이트의 아래 위치시킴
        child->setVisible(false);    // 자식 스프라이트를 화면에서 숨김
        
        return custom;
    }
    
    CC_SAFE_DELETE(custom);
    return NULL;
}

#pragma mark -
#pragma mark 자식 스프라이트의 visible상태 설정
void CustomSprite::showchild()
{
    this->getChildByTag(1)->setVisible(true);
}
#pragma mark -
#pragma mark 타입을 int로 받아서 char*형 파일 이름을 리턴
const char* CustomSprite::fileName(int Type)
{
    std::string name = "custom_";
    
    std::stringstream type;
    type << Type;
    
    name += type.str();
    name += ".png";
    
    return name.c_str();
}

2013년 11월 16일 토요일

맥에서 Android, IOS 통합개발환경 구축(cocos2d-x v2.2)




일단 설명을 돕기 위해 각 설치 디렉토리를 정리한다.

  • cocos2d-x 설치 디렉토리 : /Users/namilhan/Documents/
  • Eclipse & SDK 패키지 설치 디렉토리 :  /Applications/
  • NDK 설치 디렉토리 : /Applications/adt-bundle-mac-x86_64-20131030/(Eclipse 폴더내)


1. Cocos2d-x v2.2 설치
다운로드 주소 : http://www.cocos2d-x.org/download
다운로드가 완료되면 Documents 디렉토리 하위에 압축을 푼다.
이로서 cocos2d-x v2.2의 설치는 완료되었습니다.

2. Eclipse & SDK 패키지 설치
다운로드가 완료되면 /Applications/ 디렉토리 하위로 복사한다.
이로서 Eclipse & SDK 패키지 설치 완료

3. NDK개발킷을 설치
다운로드 주소 : http://developer.android.com/tools/sdk/ndk/index.html#download(android-ndk-r9b-darwin-x86_64.tar.bz2)
다운로드가 완료되면  /Applications/adt-bundle-mac-x86_64-20131030/ 디렉토리 하위에 압축을 푼다.
이로서 NDK 개발킷을 설치도 완료되었다.

4. 모든 설치가 완료되었으므로 이제 cocos2d-x 프로젝트를 만든다.

  • Terminal를 실행하고 /Users/namilhan/Documents/cocos2d-x-2.2/tools/project-creator 디렉토리로 이동한다.(cd입력하고 한칸 띄우고 project-creator디렉토리를 끌어다 놓고 Enter하면 이동된다.)
  • ./create_project.py 스크립트를 사용하여 프로젝트 생성(아래 이미지 참조)

 

위와 같이 proj.ios : Done!과 같이 출력이 되면 cocos2d-x-2.2/projects하위에 test프로젝트가 생성된것을 확인할 수 있다.
명령어 설명 : ./create_project.py -project [프로젝트 명] -package [팩키지명] -language [프로그램 언어]

5. Eclipse를 실행한다.
일단 생성한 프로젝트를 실행하기 전에 다음과 같은 작업이 선행돼야 한다.

  • 이클립스 상단 메뉴에서 Windows/Android SDK Manager를 선택한다.
  • 새로 열린 윈도우의 SDK Manager에서 Android 2.3.3(API 10)를 선택하고 우측하단의 Install 4 packages...를 클릭한다.
  • 새로 열린 윈도우에서 Android SDK License를 선택하고 Accept License를 선택 후 Install를 클릭하면면 SDK설치가 완료된다.

6. Eclipse 상단 메뉴에서 File/Import를 선택한다.

  • 그러면 새로운 윈도우가 열리는데 Android/Existing Android Code Into Workspace를 선택하고 Next를 선택한다.
  • 새로 열린 윈도우에서 Brower를 클릭해서 /Users/namilhan/Documents/cocos2d-x-2.2/cocos2dx/platform/android/하위에 있는 java 디렉토리를 선택하고 Open을 클릭하고 Finish를 클릭하면 Eclipse Package Explorer에 libcocos2dx가 보일것이다.

7. 이제 새로 생성한 cocos2d-x프로젝트를 Eclipse에서 연다.

  • File/New/Project를 선택해서 Select a wizard 윈도에서 Android/Android Project from Existing Code선택하고 Next를 클릭한다.
  • Import Projects 윈도우에서 Browse...를 클릭해서 cocos2d-x-2.2/Projects하위에 생성된 test프로젝트 디렉토리를 선택하고 Open을 클릭
  • Import Projects 윈도우에서 Finish를 클릭하면 Package Explorer에 test 프로젝트가 Import된 것을 확인 할 수 있다.

8. 하지만 아직 프로젝트를 실행 해볼 수 없다. 
test 프로젝트에 마우스 우클릭해서 Properties를 선택하면 다음과 같이 새루운 윈도우가 열린다.

  • C/C++ Build를 선택하고 
  • Use default build command를 선택해제하고
  • Build command에 bash ${workspace_loc:/test}/build_native.sh NDK_DEBUG=1 V=1를 입력하고
  • Build directory에 ${workspace_loc:/test}를 입력하고 OK를 클릭

9. NDK 설정
test 프로젝트에 마우스 우클릭해서 Properties를 선택한다.
C/C++ Build/Environment를 선택한다.
우측에 Add를 클릭한다.
Name에 NDK_ROOT를 입력하고
Value에 /Applications/adt-bundle-mac-x86_64-20131030/android-ndk-r9b를 입력하고 OK를 클릭한다.
 

이제 안드로이드 디바이스로 실행을 해보면 cocos2d-x의 기본 화면이 출력되는 것을 확인 할수 있다.

IOS 프로젝트는 cocos2d-x-2.2/projects 디렉토리의 프로젝트 디렉토리에서 proj.ios 디렉토리에서 [프로젝트명.xcodeproj]를 클릭하여 열면 ios프로젝트를 편집할 수 있다.

새로 생성한 코드와 리소스는 해당 프로젝트 디렉토리 하위의 Classes와 Resources에 있다.


-----------------------------------------------------------------------------------------------------------------------
Pearl Fisher

전혀 낚시같지 않은 신개념 낚시게임이에요~


진주캐기 보러가기 클릭!