#author("2016-06-01T00:26:06+00:00","","")
#author("2016-06-01T00:26:59+00:00","","")
*Cocosの流れをおさらい [#h3472130]
&ref(http://static1.squarespace.com/static/52aa8827e4b04dd8c2598a98/t/530180d1e4b06573bf2afb45/1392607465228/default_download.jpg);

AndroidのNDKのインストールを行う
 ↓
※Windows環境ではPythonを動かすためのパイソンのインストールを先に行う
 ↓
Setup.pyでCocos2dxのインストールをする
 ↓
AndroidNDKのパスを記載する
 ↓
ターゲットになるマシンのプロジェクトを立ち上げる
※apple系はapple系のマシンでしかコンパイルできない
※Windows系はWindowsマシンでしかコンパイルできない
 ↓
プラットフォームに応じたCocos2Dライブラリをビルドする
 ↓
「cocos new プロジェクト名~~~」 をコマンドラインから行う
 ↓
できたプロジェクトのソースを編集してコンパイルする
 ↓
Cocos2Dライブラリとリンクする
 ↓
ターゲットマシンに転送する
 ↓
動く

※macでwwindowsは動くが、その逆はできない。ので1つの開発マシンで全ての環境を担おうと思うとmacで開発環境を揃える方がいいような感じ。


*memcpy/memsetが使えない [#h0522743]
-Win32環境でコンパイルするとこれらが使えないです(Android-Sudio環境のNDKでは通った)セキュアな関数に移行してしまっているので、こいつらは関数をラッピングシてあげないとプラットフォームごとに#ifdefとかでコードを切り分けることになっちゃうので注意。

*CCLogが使えない? [#db371a2e]
-逆にCocosの関数が使えないことにも遭遇。謎、調査中。
-Why CCLog don’t work at cocos2d-win32? [[http://discuss.cocos2d-x.org/t/why-cclog-dont-work-at-cocos2d-win32/691]]

***エディットコンティニュー [#ab94a6fc]
 デバッグ情報のフォーマットを“Program Database for Edit and Continue (/Zi)”に設定することが必要。
 インクリメンタルリンクの有効化に“Yes (/INCREMENTAL)”を設定することが必要。
 Debug -> Optionの“Native Edit and Continue”を有効にすることが必要。


***スプライトにテクスチャを割り当てたい [#k2a5e0c6]
これでいいようです。

 //Sprite *m_pSpr;
 m_pSpr->setTexture( CCTexture2D *pTexture );

***テクスチャをメモリで作りたい [#j96f8327]
256x256でアルファチャンネル付き32bit(4バイト)画像を作る
 int texLength = 256 * 256 * 4;
 char *pData = (char*)malloc(texLength);
 
 m_pTex = new CCTexture2D();
 m_pTex->initWithData(pData, texLength, Texture2D::PixelFormat::RGBA8888, 256, 256, size );

 これでinitWithDataしたあとは、テクスチャの中身がCocosの管理下に置かれているようでpDataをfreeしても問題なかった。

もちろんpDataの中身はARGB8888で構成すること。0x80808080だとグレー、0xffffffffだと白になるよ!

***テクスチャを毎フレーム更新できる? [#i7acbed5]
pDataの中身を毎フレーム入れ替えても問題なかった。しかし使用メモリが数MB増えた(リークはしていない)のと、FPSが60から55に落ちたのが気になる。

-256x256テクスチャを生成するための26万回のメモリコピーが5FPS落ちる原因だった。
-毎フレームinitWithDataしてもFPSは変わらなかった

***テクスチャの範囲をはみ出した表示はどうなる [#q7a9d94e]
-アドレッシングモードにもよるけどデフォルトでクランプモード(最後のピクセルを引きのばす)になった

&ref("./clump.png",50%);

*C言語の開発で従来のスプライトリクエスト式を実装できるか? [#o88c06f9]

**複数のスプライト描画を無限に生成するにはどうすればいいか? [#a18fb5a6]
最終的にはdraw関数で描かれている。ただし、Sceneに登録したスプライトは自動で呼び出されるため。自分でdrawする必要はない。
それをあえて自前でdrawする(Sceneに登録せずに描画する)にはどうすればいいのか?できるのか?

***スプライトはどこで描かれているか? [#g663543b]
-同等のスプライトを自前で描画したい時にはdrawを自前で読んでやればいいと思われる。
-ただし、レンダラーと姿勢制御の4x4のマトリックスを作成して引数に加える必要があるので面倒

--やってみたけど失敗した、OpenGLの描画タイミングとあわない感じ。updateでdrawすることになってしまった


**では登録したスプライトで弾幕を作るのはどうするか? [#s1ddd1ba]
-SpriteBatchを使って表示してみる
-SpriteBAtchで毎フレームの最初に持っているchildを全部削除(removeAllChildrenWithCleanup(true))
-そのフレームで必要なスプライトをaddChildすることでどうなるか
-表示には成功

***ブレンドファンクション [#efdc5900]
         ccBlendFunc blend;
 
         blend.src = GL_ONE_MINUS_DST_COLOR;
         blend.dst = GL_ONE;
 
         hoge->setBlendFunc(blend);

||src|dst|
|ノーマル|GL_SRC_ALPHA|GL_ONE_MINUS_SRC_ALPHA|
|加算|GL_SRC_ALPHA|GL_ONE|
|減算|GL_ZERO|GL_ONE_MINUS_SRC_COLOR|
|乗算|GL_ZERO|GL_SRC_COLOR|
|反転|GL_ONE_MINUS_DST_COLOR|GL_ZERO|
|XOR|GL_ONE_MINUS_DST_COLOR|GL_ONE_MINUS_SRC_COLOR|
|スクリーン|GL_ONE_MINUS_DST_COLOR|GL_ONE|
|加算|GL_SRC_ALPHA|GL_ONE|

***アンカーポイントの原点(anchorPoint) [#k1824283]
アンカーポイントの原点は「左下」なんですって。(1.0f,1,0f)で右上になるとのこと
 これはノードの左下を(0,0)とし、右上を(1,1)としたそのノードの基準点で、デフォルトは中心(0.5 , 0.5)に設定されていま す。
 setPositionで設定した位置はこの点の位置が設定されますし、getPositionではこの点の座標が返されます。
2Dベースのライブラリなのに変わった座標系ですね。
2Dベースのライブラリなのに変わった座標系だなぁ