今回はChimpanzeeGame.xcodeproj側を開きます。
まずは
ChimpanzeeGameAppDelegate
メソッドの変更。
buttonSizeIndex
を、そのメソッド内でしか参照することができないローカル変数から、どのメソッドでも参照できるメンバ変数に変更し
int butonCount[] = {5,4,3};
を
applicationDidFinishLaunching
メソッドから外に出して
static int butonCount[] = {5,4,3};
とする。
これらの変更は
toggleView
メソッドでこれらの値を参照するための変更。設定ビューに切り替わる時は、設定ビューコントローラに現在の設定を知らせ
[flipsideViewController setButtonCount:(float)buttonSizeIndex / 2.0];
[flipsideViewController setLevelRatio:(float)[viewController getLevelRatio]];
ゲーム画面に戻る時は設定ビューの状態をゲーム画面コントローラに反映させる。
[viewController setLevelRatio:(double)[flipsideViewController getLevelRatio]];
buttonSizeIndex = [flipsideViewController getButtonCount] * 2;
[viewController setSize:butonCount[buttonSizeIndex] vCount:butonCount[buttonSizeIndex]];
ここで
(float)buttonSizeIndex / 2.0
としているのは、buttonSizeIndexが0,1,2のいずれかの値を取るので、これをflipsideViewControllerのスライダ用に0.0~1.0に変換するため。同様に
[flipsideViewController getButtonCount] * 2
とすることで、0.0~1.0の値を0,1,2のいずれかの値に変換している。ただ、これだと2の値は、スライダが右端までいかないと取れないことになる。
buttonSizeIndex = (int)([flipsideViewController getButtonCount] * 2.999);
とした方が、均等になる。3.0としてしまうと、0,1,2,3の範囲になってしまうので注意。これはC言語の浮動小数点型から整数型にする時の決まり。
0.9 -> 0
1.5 -> 1
1.9 -> 1
というように、四捨五入ではなく、切り捨てになる。
忘れちゃいけないのが
applicationWillTerminate
メソッドでの処理。
いつもゲーム画面の方で終了するとは限らない。設定ビュー側で終了する場合も考慮して
if ([viewController.view superview] != nil) {
とし、どちらのコントローラから値を取り出すかのが適切か判断する。
これで、準備OKということでさっそくビルドして実行すると、設定ビューに切り替えても、スライダはそれなりの位置にきてるけど、画面の表示が以下のようになったまま。
これは、
FlipsideViewController.m
の
setButtonCount
setLevelRatio
メソッド実装不備。それぞれ
[_view setButtonCount:inCount];
[_view setLevelRatio:inLevelRatio];
としてビューへの反映を忘れていた。
気を取り直してビルドして実行すると、今度はちゃんと反映されています。
ただね~、使いにくい。
どんな設定状態か、ひじょ~にわかりずらい。
というわけで、次回はFlipsideViewを文字表示からグラフィック表示に変えてみるザンスよ。
------------
サンプルプロジェクト:Chimpanzee-14.zip
まずは
ChimpanzeeGameAppDelegate
メソッドの変更。
buttonSizeIndex
を、そのメソッド内でしか参照することができないローカル変数から、どのメソッドでも参照できるメンバ変数に変更し
int butonCount[] = {5,4,3};
を
applicationDidFinishLaunching
メソッドから外に出して
static int butonCount[] = {5,4,3};
とする。
これらの変更は
toggleView
メソッドでこれらの値を参照するための変更。設定ビューに切り替わる時は、設定ビューコントローラに現在の設定を知らせ
[flipsideViewController setButtonCount:(float)buttonSizeIndex / 2.0];
[flipsideViewController setLevelRatio:(float)[viewController getLevelRatio]];
ゲーム画面に戻る時は設定ビューの状態をゲーム画面コントローラに反映させる。
[viewController setLevelRatio:(double)[flipsideViewController getLevelRatio]];
buttonSizeIndex = [flipsideViewController getButtonCount] * 2;
[viewController setSize:butonCount[buttonSizeIndex] vCount:butonCount[buttonSizeIndex]];
ここで
(float)buttonSizeIndex / 2.0
としているのは、buttonSizeIndexが0,1,2のいずれかの値を取るので、これをflipsideViewControllerのスライダ用に0.0~1.0に変換するため。同様に
[flipsideViewController getButtonCount] * 2
とすることで、0.0~1.0の値を0,1,2のいずれかの値に変換している。ただ、これだと2の値は、スライダが右端までいかないと取れないことになる。
buttonSizeIndex = (int)([flipsideViewController getButtonCount] * 2.999);
とした方が、均等になる。3.0としてしまうと、0,1,2,3の範囲になってしまうので注意。これはC言語の浮動小数点型から整数型にする時の決まり。
0.9 -> 0
1.5 -> 1
1.9 -> 1
というように、四捨五入ではなく、切り捨てになる。
忘れちゃいけないのが
applicationWillTerminate
メソッドでの処理。
いつもゲーム画面の方で終了するとは限らない。設定ビュー側で終了する場合も考慮して
if ([viewController.view superview] != nil) {
とし、どちらのコントローラから値を取り出すかのが適切か判断する。
これで、準備OKということでさっそくビルドして実行すると、設定ビューに切り替えても、スライダはそれなりの位置にきてるけど、画面の表示が以下のようになったまま。
これは、
FlipsideViewController.m
の
setButtonCount
setLevelRatio
メソッド実装不備。それぞれ
[_view setButtonCount:inCount];
[_view setLevelRatio:inLevelRatio];
としてビューへの反映を忘れていた。
気を取り直してビルドして実行すると、今度はちゃんと反映されています。
ただね~、使いにくい。
どんな設定状態か、ひじょ~にわかりずらい。
というわけで、次回はFlipsideViewを文字表示からグラフィック表示に変えてみるザンスよ。
------------
サンプルプロジェクト:Chimpanzee-14.zip