nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

cocos2d-xで図形の描画

空のシーンの作成

  • "PROJECT_NAME" の "Classes" を右クリックして "New File" で "C and C++" の "C++ Class" を選択して "GameScene" クラスを作成
  • GameScene.h を以下の通りに
#ifndef __GameScene__
#define __GameScene__

#include "cocos2d.h"

USING_NS_CC;

class GameScene : public cocos2d::CCLayer
{
public:
    virtual bool init();
    static cocos2d::CCScene* scene();
    CREATE_FUNC(GameScene);
};

#endif /* defined(__GameScene__) */
  • GameScene.cpp を以下の通りに
#include "GameScene.h"

using namespace cocos2d;
using namespace std;

CCScene* GameScene::scene()
{
    CCScene* scene = CCScene::create();
    GameScene* layer = GameScene::create();
    scene->addChild(layer);
    
    return scene;
}

bool GameScene::init()
{
    if (!CCLayer::init()) {
        return false;
    }

    return true;
}

図形の描画

  • 空のシーンを作成する
  • GameScene.h の "public:" の上の行に以下を追記
private:
    void drawTest();
    void deleteTest();
  • GameScene.cpp に以下を追記
void GameScene::drawTest()
{
    // 画面サイズの取得
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    
    // 描画用ノードの作成
    CCDrawNode* draw = CCDrawNode::create();
    draw->setPosition(ccp(0, 0));
    draw->setTag(1);
    this->addChild(draw);
    
    /* 円の描画 */
    draw->drawDot(ccp(size.width * 0.5, size.height * 0.5), // 中心
                  size.height * 0.5,                        // 半径
                  ccc4FFromccc3B(ccBLUE)                    // 色
                  );
    
    /* 線の描画 */
    draw->drawSegment(ccp(0, 0),                    // 起点
                      ccp(size.width, size.height), // 終点
                      2,                            // 太さ
                      ccc4FFromccc3B(ccRED)         // 色
                      );
    
    /* 多角形の描画 */
    static CCPoint points[] = {
        ccp(0, 0),
        ccp(size.width * 0.5, size.height),
        ccp(size.width, 0),
    };
    draw->drawPolygon(points,                  // 頂点の座標のデータ
                      3,                       // 角数
                      ccc4FFromccc3B(ccGREEN), // 図形の色
                      1,                       // 枠線の太さ
                      ccc4FFromccc3B(ccBLACK)  // 枠線の色
                      );
}

void GameScene::deleteTest()
{
    // 描画用ノードを削除すると、描画された図形も消える
    this->removeChildByTag(1);
}
  • GameScene::init の "return true;" の前に以下を追記
    drawTest();
    this->scheduleOnce(schedule_selector(GameScene::deleteTest), 3);
  • これで開始直後に図形を描画して、3秒後に消すサンプルの完成。