うっかりしていると忘れられてしまいそうですが。
このブログはiPhoneアプリ開発ブログです。
でしたよね?覚えていますか?
現在はドムドムなるアプリを作っている最中なのですが、
12回目ともなるとそもそもの仕様要件を忘れていたりいなかったり。
ここで1回おさらいしてみましょう。
どんなものを作る予定でしたっけ?
ドムドムその1:設計図を書いてみよう
・ボールINスイッチを押すとボール出現(実装済み)
・加速度センサーでボール移動(実装済み)
・壁に当たるとバウンド(実装済み)
・バウンド時に音が鳴る(未実装)
・バウンドするとバウンド回数カウントアップ(未実装)
・リアルタイム座標取得、表示(実装済み)
・その他リアルタイムプロパティ取得、表示(未実装)
・ボールINスイッチをもう1回押すとカウンターリセットしてボール削除(半分実装済み)
なるほどなるほど。
とすると、大きく残っている部分は、
・音を鳴らす
・カウンターを作る
この2つです。
どっちを作りましょうか。
カウンターを作りましょうか。まずは。ええ。低い山を。
ドムドムカウンターとして欲しい機能は2つありました。
1つは 壁にボールが当たるとカウントアップすること
もう1つは ボタンを押すとリセットできること
おさらいOKですか?
それでは行きましょう。
int count;
まず最初に、ヘッダーに変数を1つ追加しておきます。
カウンターの数字を格納しておくための変数です。
count = 0;
次にそれをviewDidLoad、つまりビューの呼び出しが完了した直後に初期化します。
最初を1にするか、最初をゼロにするかは好みの問題ですので、ご自由にどうぞ。
私はゼロにしてみました。
で、ここが機能の1個目。
壁にぶつかったらカウンターが1アップする仕組みを作ります。
以前バウンドの仕組みを作りましたね。
ドムドムその8:壁を作って弾ませよう
その中で
ボールは画面というものを全く認識していないので、
自分で壁は作らないといけない。
なんて話をしました。
従ってここまで作ってきたみなさんのプログラムの中には、
壁に跳ね返ったらXXするというプログラムは既に実装されています。
ですので、
今回はその部分についでにカウンターを1アップすると書くだけでOKです。
// 衝突判定(X軸左方向)
if(posX2 <= ballButton.currentImage.size.width/2){
vx2 *= -0.8;
posX2 = ballButton.currentImage.size.width/2;
// カウントアップ
count += 1;
}
さて、今回画面上に用意したカウンターは2桁のカウンターです。
バウンドを続ければ100回を超えてしまうこともありますので、
超えた場合の処理を考えておきましょう。
// 99を超えた場合の対応
if(count >= 100){
count = 0;
}
ゼロリセットする場合はこんな感じ。
さて。
ここまではスムーズに来ました。
ここまでは。
本来こんな設定はしちゃダメだとは思いますが、、、
練習ということでこれでなんとかしてみましょう。
なんとかしてみましょう。
してみましょう。
ましょう。
しょう。
しょう。
。。。
そういえば、
カウンター欄、桁ごとに分けて作ってましたね。。。
今のカウンター用変数は1つの数字です。
ですが、出力するラベルは2つ。桁ごと。
どうするか。
こうします。
// 文字切り抜き範囲の設定
NSRange range1 = {0,1};
NSRange range2 = {1,1};
// 文字切り抜き、ラベルへ代入
counter10.text = [[NSString stringWithFormat:@”%02d”,count] substringWithRange:range1];
counter1.text = [[NSString stringWithFormat:@”%02d”,count] substringWithRange:range2];
ポイントは2つ。
stringWithFormatと
substringWithRangeを使います。
前者は前にも出てきました。
値を指定したフォーマットの形に整形するメソッドですね。
後者はお初です。
文字列を指定した範囲で切り取るメソッドです。
カウンター用の変数に入っている値は、1から99までと、
1桁 もしくは 2桁 になっていますので、
まずはそれをstringWithFormatを使って強制的に2桁(ゼロ埋め)にします。
まずはコレが大事です。
桁さえ揃ってしまえばイレギュラーなパターンが無くなりますので、
後はきっちり文字を切り取ってあげればよい、というシンプルな考え方になります。
切り取るための範囲はNSRangeで指定します。
NSRange range1 = {0,1};
これは、ゼロ文字目から1文字分、という指定。
NSRange range2 = {1,1};
これは、1文字目から1文字分、という指定。
こうすることで、1文字目と2文字目を取得できるわけです。
counter10.text と counter1.text にそれぞれ代入しておきましょう。
で、もう1つの機能。
ボタンを押されたらリセットする部分です。
dispBallのアッションメソッドの中に書いておけば、
ボールのON/OFFと一緒に処理してくれます。
ドムドムその9:ON/OFFスイッチを作ろう
// カウンター初期化
count = 0;
counter10.text = [NSString stringWithString:@”0″];
counter1.text = [NSString stringWithString:@”0″];
変数をゼロリセットすると同時に、2つのラベルにもゼロを入れておきましょう。
では、ここまで書けたら「ビルドして進行」です!
回る回る~。
カウンターはあると便利な機能ですので、
この機会にしっかり基本的な作り方は覚えてしまいましょう!