ドムドムその12:カウンターを作ろう

サルでき.jp > 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) > ドムドムその12:カウンターを作ろう

2009/10/28 09:00 投稿先 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) 投稿者 カワサキ タカシ

っかりしていると忘れられてしまいそうですが。

このブログはiPhoneアプリ開発ブログです。
でしたよね?覚えていますか?

現在はドムドムなるアプリを作っている最中なのですが、
12回目ともなるとそもそもの仕様要件を忘れていたりいなかったり。

ここで1回おさらいしてみましょう。
どんなものを作る予定でしたっけ?
ドムドムその1:設計図を書いてみよう

ドムドムその12:カウンターを作ろう

・ボールINスイッチを押すとボール出現(実装済み)
・加速度センサーでボール移動(実装済み)
・壁に当たるとバウンド(実装済み)
・バウンド時に音が鳴る(未実装)
・バウンドするとバウンド回数カウントアップ(未実装)
・リアルタイム座標取得、表示(実装済み)
・その他リアルタイムプロパティ取得、表示(未実装)
・ボールINスイッチをもう1回押すとカウンターリセットしてボール削除(半分実装済み)

なるほどなるほど。
とすると、大きく残っている部分は、

・音を鳴らす
・カウンターを作る

この2つです。
どっちを作りましょうか。

カウンターを作りましょうか。まずは。ええ。低い山を。

ドムドムカウンターとして欲しい機能は2つありました。

1つは 壁にボールが当たるとカウントアップすること
もう1つは ボタンを押すとリセットできること

おさらいOKですか?

それでは行きましょう。

domdomViewController.h
ドムドムその12:カウンターを作ろう

int count;

まず最初に、ヘッダーに変数を1つ追加しておきます。
カウンターの数字を格納しておくための変数です。

domdomViewController.m
ドムドムその12:カウンターを作ろう

count = 0;

次にそれをviewDidLoad、つまりビューの呼び出しが完了した直後に初期化します。

最初を1にするか、最初をゼロにするかは好みの問題ですので、ご自由にどうぞ。
私はゼロにしてみました。

domdomViewController.m
ドムドムその12:カウンターを作ろう

で、ここが機能の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;

}

domdomViewController.m
ドムドムその12:カウンターを作ろう

さて、今回画面上に用意したカウンターは2桁のカウンターです。
バウンドを続ければ100回を超えてしまうこともありますので、
超えた場合の処理を考えておきましょう。

// 99を超えた場合の対応
if(count >= 100){
count = 0;
}

ゼロリセットする場合はこんな感じ。

さて。
ここまではスムーズに来ました。
ここまでは。

ドムドムその3:レイアウトを組もう

本来こんな設定はしちゃダメだとは思いますが、、、
練習ということでこれでなんとかしてみましょう。
なんとかしてみましょう。
してみましょう。
ましょう。
しょう。
しょう。
。。。

そういえば、
カウンター欄、桁ごとに分けて作ってましたね。。。

今のカウンター用変数は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.textcounter1.text にそれぞれ代入しておきましょう。

domdomViewController.m
ドムドムその12:カウンターを作ろう

で、もう1つの機能。
ボタンを押されたらリセットする部分です。

dispBallのアッションメソッドの中に書いておけば、
ボールのON/OFFと一緒に処理してくれます。
ドムドムその9:ON/OFFスイッチを作ろう

// カウンター初期化
count = 0;
counter10.text = [NSString stringWithString:@"0"];
counter1.text = [NSString stringWithString:@"0"];

変数をゼロリセットすると同時に、2つのラベルにもゼロを入れておきましょう。

では、ここまで書けたら「ビルドして進行」です!

ドムドムその12:カウンターを作ろう

回る回る~。

カウンターはあると便利な機能ですので、
この機会にしっかり基本的な作り方は覚えてしまいましょう!

関連する記事:


Advertisement