2013年5月27日月曜日

cocos2d-xで画像データを表示する方法

メモリ上で作成したRAWデータの画像を表示したい場合、
CCTexture2Dでテクスチャを作成して、CCSpriteで表示する。

例えばこんな感じ。

CCSprite* createSpriteWithRawData(const void* data, unsigned int width, unsigned int height)
{
    CCTexture2D* texture = new CCTexture2D();
    if (texture && texture->initWithData(data, kCCTexture2DPixelFormat_RGBA8888, width, height, CCSizeMake(width, height))) {
        texture->autorelease();
        return CCSprite::createWithTexture(texture);
    }
    CC_SAFE_DELETE(texture);
    return NULL;
}
※ CCTexture2D::initWithDataは、dataをglTexture2Dに渡してグラフィックスハードウェアに転送している。
従ってdataをメモリ上に確保しておく必要はない。

ネットワーク経由で取得したPNGやJPG画像を表示したい場合などは、
CCImageで画像フォーマットを解析してから、CCTexture2DとCCSpriteで表示する。

例えばこんな感じ。

CCSprite* createSpriteWithPngData(void* data, unsigned long data_length)
{
    CCImage* image = new CCImage();
    if (image && image->initWithImageData(data, data_length, CCImage::kFmtPng)) {
        image->autorelease();
        CCTexture2D* texture = new CCTexture2D();
        if (texture && texture->initWithImage(image)) {
            texture->autorelease();
            return CCSprite::createWithTexture(texture);
        }
        CC_SAFE_DELETE(texture);
        return NULL;
    }
    CC_SAFE_DELETE(image);
    return NULL;
}
※ CCImage::initWithImageDataは、dataを必要に応じてコピーしている。
従ってdataをメモリ上に確保しておく必要はない。

2013年5月19日日曜日

cocos2d-xでハイブリッドプロジェクトを作る方法

cocos2d-xの新規プロジェクト、どうやって作ってる?

ぐぐってみると、

  1. Xcodeのプロジェクトテンプレートを使ってiOS向けの新規プロジェクトを作成する
  2. create-android-project.shを使ってAndroid向けのプロジェクトを作成する
  3. これら2つのディレクトリをマージする
  4. cocos2d-xのソースをマージする
  5. Android向けのビルド関連ファイルを修正する

という手順が紹介されていることが多い。

cocos2d-x.orgのニュースに掲載されている本「Cocos2d-X By Example Beginner's Guide」でも同様の手順が紹介されている。

しかし、この手順でプロジェクトを作ると3つのことが気に入らない。

  1. めんどくさい
  2. ディレクトリ構成がめちゃくちゃ
  3. iOSやAndroid以外のプラットフォームのビルドはどうするんだ?

個人的には(3)は無視できるけれど、(2)は無視できないし、(1)は致命的だ。

この状況を解決してくれるのが project-creator だ。
cocos2d-2.1rc0-x-2.1.3.zipを展開すると、tools/project-creatorディレクトリに"create_project.py"というファイル名のPythonスクリプトがある。

このスクリプトを使うとsamplesと同じ構成のハイブリッドなプロジェクトを、ものすごく簡単に作れるうえに、iOSやAndroidだけでなく、たとえばwin32向けのビルドもできるようになるのだ。

たまたま、Windows8(x64)の環境で遊んでいたので、win32向けのビルドを試してみた。

Microsoft Visual C++ 2010 Express
Windows SDK
Python 2.7.5 Windows X86-64 Installer

これらをインストール(再起動が必要だったし、ついでにMicrosoft Updateしたり)した後、
コマンドプロンプトでcreate_project.pyを実行した。

D:\> cd cocos2d-2.1rc0-x-2.1.3\tools\project-creator
D:\cocos2d-2.1rc0-x-2.1.3\tools\project-creator> create_project.py -project Praise002 -package net.xpraise.praise002 -language cpp

proj.win32のslnファイルをVC++で開いてデバッグ実行した時のキャプチャ。



VC++でデバッグするのはありかもしれないな。