月別アーカイブ: 2015年5月

Quwel メモ

Quwel  プログラムに関するメモ

  • 1マスを char で表し、8×8 配列を用意するとよい
  • 1次元配列にし、周囲に番人を置くとよい。9×10 = 90バイトの1次元配列となる
  • 単純な反復深化でも、ツリーの幅が狭い問題であれば解くことができる。
    • リラックス Level 100 は、幅が狭く、最短手数は10手だが、探索ノード数約6000で解を発見できる
    • リラックス Level 99 は、幅が広く、最短手数は10手だが、7百万以上でも解を発見できない

 

ファイヤーアルパカ > 塗り残しを無くそう

ペンで線画を描き、バケツツールで塗りつぶすと、下図のように塗り残しが出来る場合があります。

temp

これを防ぐには、ツールバーで、拡張ピクセル数を 2 または 3 に設定します。

temp

そうしておいて、バケツツールで塗りつぶすと、下図のように塗り残しができず、綺麗に塗れます。

temp

cocos2d-x v3 > シングルタッチイベントリスナー

cocos2d-x v3 のシングルタッチイベントリスナーのテンプレーと

    // タッチイベントリスナー
    auto touchListener = EventListenerTouchOneByOne::create();
    touchListener->onTouchBegan = [this](Touch* touch, Event *){
    	return true;
    };
    touchListener->onTouchMoved = [this](Touch* touch, Event *){
    };
    touchListener->onTouchEnded = [this](Touch* touch, Event *){
    };
    this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchListener, this);

cocos2d-x v3 > 画像を動的に生成

cocos2d-x で高速に動作する Conway’s Game Of Life (ライフゲーム)を作ろうと思い、画像を動的に生成する方法を調べてみた。

動的に画像を生成するには DrawNode::drawDot() を使うと簡単だ。
が、drawDot() は大きさを持ったドットを三角形の組み合わせに分解し、その頂点座標と塗りつぶし色を OpenGL に送るので、Game Of Life 用としては無駄が多く、パフォーマンス的に問題だ。

よって、矩形スプライトを作成し、そのテクスチャパターンを動的に生成する方がよい。

宣言ファイル:

 std::vector<Color3B> m_buffer;  //  テクスチャデータを格納する動的配列
 cocos2d::Texture2D *m_texture;
 cocos2d::Sprite *m_sprite;

実装ファイル:

const int WIDTH = 800;
const int HEIGHT = 1000;
m_buffer.resize(WIDTH*HEIGHT);
for(int i = 0; i != m_buffer.size(); ++i) {
    m_buffer[i].r = 赤色値;
    m_buffer[i].g = 緑色値;
    m_buffer[i].b = 青色値;
}
Size contentSize;
contentSize.width  = WIDTH;
contentSize.height = HEIGHT;
m_texture = new Texture2D();
m_texture->initWithData((const void *)&m_buffer[0], WIDTH*HEIGHT*sizeof(Color3B),
			Texture2D::PixelFormat::RGB888, WIDTH, HEIGHT, contentSize);
m_sprite = Sprite::createWithTexture(m_Texture);
m_sprite->setPosition(位置);
addChild(m_sprite);

Nexus 7 (2013) 800×1000 グリッドサイズの場合、DrawNode::drawDot() を使った場合は数FPSだったのが、上記の方法により約30FPSを実現するのに成功した。