クラス変数としての配列の宣言

果物ブロック

初開発iPhoneゲームに ブロック崩し を選択し、 参考サイトに助けられながら も実装を進捗するに 徐々に己独自の要素を持ち込みたくなるもの、 また此れなくばアプリ開発の意味はありませんし アップル社に申請したとて審査通過の後 App Storeに陳列されなどしないでしょう。

盛り込みたく目論んだのはゲームの一方の主役たるブロックが いにしえ より連綿たる単なる四角では面白くもなく 此れを果物に変えんと欲し又プレイヤーが面クリアーする毎に 果物の種類を変えたく目論んだのでした。

スポンサーリンク
日付:2014年3月13日
開発機:MacBook Air(11-inch, Mid 2013)
MacOSバージョン:OS X 10.9.1
Xcodeバージョン:5.1
言語:Objective-C
主関連アプリ:uPanda Breaks Out Fruits

開発中のゲームアプリの構成としては UIViewController 上のViewを SpriteKitScene 足る BOPlayScene (BOは接頭辞としてBreak Outを略してもの)に遷移してゲーム画面を表示しており 面クリアーする毎にこのSceneを初期化して読み込んでいます。 この時当該クラス、及び所有するメソッド全てから参照出来る定数の如き扱いの 必要なだけの果物名を収めた配列を用意したいのでした。 即ちクラス変数としての配列の宣言を行いたいのです。 その際参考になったのがサイト ios-practice 0.1 documentation の以下の記事でした。

プロパティとインスタンス変数(ivar)

BOPlaySceneでどのメソッドからもフルーツ配列を参照するに クラスのグローバル領域で以下を記述します。 此れはブロックのフルーツの種類(果物名)の配列で initWithSize で初期化される塩梅になっています。

NSArray *blockKindArray;

然るに初期化メソッドに於いて一回だけ配列を記述すべきは 例としてリンゴ、バナナ、ブドウ、サクランボとなれば以下となるでしょう。

self = [super initWithSize:size];
if (self) {
  /* フルーツ配列の初期化 */
  blockKindArray = [NSArray arrayWithObjects:@"apple", @"banana", @"grape", @"cherry", nil];

然者しからば 以下クラス内からなら blockKindArray でアクセス可能となる道理です。 初期化メソッドを -(id)initWithSize:(CGSize)size life:(int)life stage:(int)stage score:(int)score {...} で用意すれば面(ステージ)の数から1を減じれば 其のステージに該当すべく用意した配列から妥当な果物名を得られます。

-(NSString *)blockKindOfStage {
  NSLog(@"Block Kind: %d", (self.stage - 1) % blockKindArray.count);
  return blockKindArray[(self.stage - 1) % blockKindArray.count];
}

而して目論見は達成されました。 上のコードではログ出力に取得配列を確認していますが画像名を此れに合わせたファイルとすれば ステージに合わせた果物画像がブロックとして得られるでしょう。

uPanda Breaks Out Fruits
無料:カテゴリ: ゲーム: 4+ 評価
バージョン: 4.12
リリース: 2014年9月15日
更新: 2022年4月20日
サイズ : 10.7 MB
互換性: iOS 14.4 以降のiPhone、iPod touch に対応。および、macOS 11.0以降とApple M1 チップを搭載したMac に対応。