Hatena::ブログ(Diary)

万年素人からGeekへの道 このページをアンテナに追加 RSSフィード Twitter

2014/8/19に移行した→ 万年素人からHackerへの道
 | 

2012-10-14 Sunday

cocos2d-xのv2.xで動かなくなった

・旧

  CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);

・新(v2.x) こうした

    CCTouchDispatcher* touchDispatcher = CCDirector::sharedDirector()->getTouchDispatcher();
    touchDispatcher->addTargetedDelegate(this, 0, true);

・旧

	this->setIsTouchEnabled(true);

・新 "Is"が消えた!

	this->setTouchEnabled(true);

・旧(これも動かない)

        CCPoint touchLocation = touch->locationInView(touch->view());
	touchLocation = CCDirector::sharedDirector()->convertToGL(touchLocation);

touch->view()、つまり、CCTouchのview()メソッドがなくなってる??

↓こうすると思ったが、これは非推奨だった

CCPoint touchLocation = touch->locationInView();

↓まず、ここを参考

URL:http://www.cocos2d-x.org/reference/native-cpp/de/d9b/classcocos2d_1_1_c_c_touch.html

CCPoint 	getDelta () const
 	returns the current touch location in screen coordinates 
 
CCPoint 	getLocationInView () const
 	returns the current touch location in screen coordinates 

・新(v2.x) これが正しい

CCPoint touchLocation = touch->getLocationInView();

XCodeエミュレータが選べなくなった

ここを直す!

f:id:shinriyo:20121014181356p:image

選べるようになった

f:id:shinriyo:20121014181110p:image

CocosBuilder手順 for cocos2d-x

CocosBuilderが使いやすいっぽい。

これは、ゲーム部分というより、タイトル画面とかステージ選択画面とかで使うのが吉だと思う。

注意!Version 2.1のにcocos2d-xが対応したようだ。

RC版「Release Candidate製品候補版)」だが、「Version 2.1 RC 3」を使うように(2012/10/14現在

cocos2d-iPhoneのために作られたっぽいが、

しかも、cocos2d-xでも使えるらしい。

URLhttp://qiita.com/items/40fa88d149fdecaa9f86

「Example」を公式サイトからダウンロードしてProjectへ追加している、

しかし、cocos2d-xには専用のクラスがすでに同梱されているのでしなくてよさそう。

cocos2d-xのフォーラム

URLhttp://tillawy.wordpress.com/

1. プロジェクト作成

CocosBuilderを起動して、File -> New -> New Project… にて、実際のcocos2d-xプロジェクト

※〜.xcodeproj->の中に「CocosBuilder Files (start here)」フォルダを作って、その中に作成した「Project」フォルダ作成するのが好ましい。

「CocosBuilder Files (start here)」フォルダに「Resrources」を入れてそれは、画像管理にする。

2.Publish先設定

「File -> Project Settings…」にてどこにファイルを保存するかが選べる。

f:id:shinriyo:20121014182413p:image

参考のサイトと同様、「CocosBuildet Test」の略で、CCBTestにした。

3.ZIPで保存する設定はしない

zip形式で保存するにはチェックする。後ほど説明するPublishするときにzipになる。

チェックしないと「"〜.ccbi」になる。

f:id:shinriyo:20121014180149p:image

!!!cocos2d-xは対応してないのでチェックしない

Please note that cocos2d-x can’t read archive zip files (AFAIK), so you need to uncheck (public to zip file) in cocosbuilder project settings

4.レイヤーファイル作成

「File -> New -> New File…」からメニューを出す。

f:id:shinriyo:20121014182614p:image

Root object type」を「CCLayer」にして作成

実際に作られるのはmmファイルとかではなくて専用の.ccbファイルが出来るようだ。

f:id:shinriyo:20121014182615p:image


左下のProject内に一覧が出てるがそこにレイヤーが追加される。

f:id:shinriyo:20121014183715p:image

※次回からこれを開く

f:id:shinriyo:20121014183826p:image

右上の設定は、このように名前を入れる。

CCBTestにした。これはあとからPublishされる名前になるはず。

すると、

左上のStructureレイヤーが追加される。

f:id:shinriyo:20121014183326p:image

5.Publishする

Publish(option+command+S)を選ぶ!

2.0バージョンはPublish Archive File(option+shift+command+S)もあった。

f:id:shinriyo:20121014180148p:image

「CCBTest.ccbi」ファイルができます

これで、CocosBuilderの作業は終わり

6.素材を移す

f:id:shinriyo:20121014184800p:image

ドラッグドロップしてResourcesフォルダからXCodeへ「CCBTest.ccbi」をコピー

このメニューはデフォルトにした。

f:id:shinriyo:20121014181112p:image

7.最後組み込み

今回、AppDelegate.cppを改変する。

もともとは、HelloWorldシーンを実行させている。

・AppDelegate.cppの上がわのinclude設定。

#include "CCBReader.h"
#include "CCNodeLoaderLibrary.h"

・AppDelegate.cpp

    // create a scene. it's an autorelease object
    CCScene *pScene = HelloWorld::scene();
    // run
    //pDirector->runWithScene(pScene);

↓これを今回のやつに置き換える。

    cocos2d::extension::CCNodeLoaderLibrary * ccNodeLoaderLibrary = cocos2d::extension::CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary();
    cocos2d::extension::CCBReader * ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);
    CCNode * node = ccbReader->readNodeGraphFromFile("CCBTest.ccbi");
    CCScene * scene = CCScene::create();
    if(node != NULL) {
        scene->addChild(node);
    }
    ccbReader->release();
    // run
    pDirector->runWithScene(scene);

↑のコードのcocos2d::extension::が長くてうっとおしいので

USING_NS_CC_EXT;

を一番上に追加して、

    CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary();
    CCBReader * ccbReader = new CCBReader(ccNodeLoaderLibrary);
    CCNode * node = ccbReader->readNodeGraphFromFile("CCBTest.ccbi");
    CCScene * scene = CCScene::create();
    if(node != NULL) {
        scene->addChild(node);
    }
    ccbReader->release();
    pDirector->runWithScene(scene);

にしてもいい

↓のように、ファイル名間違ってなくてもなぜか出来ない場合はCocosBuilderのVersionを確認しよう

f:id:shinriyo:20121014193114p:image

ット思ったが、できない!!!

CCDictionaryのgetStrKey

・1.x系は「CCStringToStringDictionary」である

CCStringToStringDictionary *spawnPoint = objects->objectNamed("SpawnPoint");
int x = spawnPoint->getStrKey("x")->toInt();

しかし、2.x系はCCDictionaryが推奨らしい・・・


・2.x系なのでこのように変えてみても値は取れるがぜんぜん違う・・。

※(int)でキャストしたせい?

CCDictionary *spawnPoint = objects->objectNamed("SpawnPoint");
int x = (int)spawnPoint->objectForKey("x");

・こらならいけた!

int x = ((CCString *)spawnPoint->objectForKey("x"))->intValue();
int y = ((CCString *)spawnPoint->objectForKey("y"))->intValue();

・Titleマップエディタオブジェクト見方

どこでx,yを指定してるのか?

1.Layersビューでは、Objectsを選択。

f:id:shinriyo:20121014155448p:image

2.メインのビュー上で右クリックして、

f:id:shinriyo:20121014155446p:image


3.「Objects Properties…」を選択

f:id:shinriyo:20121014155447p:image

4.

f:id:shinriyo:20121014155449p:image

エディタ上だと、XとYは大文字だけど、プログラム上は小文字にしないとEXC_BAD_ACCESSって怒られる・・。

 |