sceneIdx = sceneIdx % ( sizeof(transitions) / sizeof(transitions[0]) );
という部分は 何を意味しているのかな、と思い調べてみる。
http://stackoverflow.com/questions/4786383/sizeof-c-array-with-integers-in-obj-c に、以下のような記述があった。
If what you want is the length of the array, you can dosizeofはバイトでのサイズを返す関数なので、sizeof(arr) / sizeof(arr[0])
which will give you the size of the entire array divided by the size of each element. In this case you will get8 / 4 == 2
, which is what I take it you expect.
sizeof(transitions)/sizeof(transitions[0])は、配列全体のバイト/配列内の一要素のバイトの様子。
要するに、配列内に、いくつの要素があるか、ということを取得しているのかな。
で sceneIdx % ( sizeof(transitions) / sizeof(transitions[0]) );
はすなわち、
sceneIdx % 配列数
ということだから、
配列数で割ったあまりの数を代入している、と。
そんな感じでしょうか。
:::::::::::::::::::::::::::::::
ということで、コードを見直すと、
sceneIdx++;sceneIdx = sceneIdx % ( sizeof(transitions) / sizeof(transitions[0]) );
は、
sceneIdx++をしていっても、
配列数を超えないで,配列内のindex番号を取得するためのコードだと判明。
なるほど。
で、
で、
sceneIdx++;sceneIdx = sceneIdx % ( sizeof(transitions) / sizeof(transitions[0]) );
NSString *r = transitions[sceneIdx];
Class c = NSClassFromString(r);return c;
は、複数のトランジションを格納したインデックスを取得して、
次々に、シーンを変更するのだと理解。
NSString *rにtransition名を代入し、
NSClassFromStringでクラス名としてrを変換し、
returnする、と。
なるほど。
:::::::::::::::::::::::::::::::
で、定型的に、cocos2dでは、
Class nextAction
Class backAction
Class restartAction
を定義していて、
上記のsizeofを使った配列数の取得をしている、と。
たとえば、
ブラケット{}なしのif文で、0より小さくなった場合だけ、配列数を足して正の数に戻している、と。
なるほど。
この三つのクラスで、下の矢印と○の部分を実装しているのですね。
これなら、定型的に書いていて、毎回、transitionsの数を変えても、対応できますね。
なるほどでした。
:::::::::::::::::::::::::::::::
で、定型的に、cocos2dでは、
Class nextAction
Class backAction
Class restartAction
を定義していて、
上記のsizeofを使った配列数の取得をしている、と。
たとえば、
sceneIdx--;int total = ( sizeof(transitions) / sizeof(transitions[0]) );は、int totalに配列の要素数を取得し、
if( sceneIdx < 0 )
sceneIdx += total;
ブラケット{}なしのif文で、0より小さくなった場合だけ、配列数を足して正の数に戻している、と。
なるほど。
この三つのクラスで、下の矢印と○の部分を実装しているのですね。
これなら、定型的に書いていて、毎回、transitionsの数を変えても、対応できますね。
なるほどでした。
0 件のコメント:
コメントを投稿