だいたい47度

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

cocos2dゲームでデータ消去ボタン実装

iPhoneゲームアプリではユーザが自分のセーブデータを消したいときがあります。

データ削除の際には確認表示が必須です。一回のタップで全てのデータが消えてしまうのはあんまりです。

確認表示にはUIKitを使うのが、楽かつ綺麗に思います。前回作成したアプリでは、データ削除ボタンをタップすると別レイヤを呼び出し、そこに確認文言とOK・cancelボタンを作っていました。ゲーム全体の雰囲気を保持したかったのでそうしたのですが、今回UIKitをちょっと試してみたところ意外とキレイにマッチしそうだったので、反省をこめて記事を残します。
data_delete_confirm.png

まず、データ削除ボタンとしてCCMenuItemを作ります。これは単純。タップされた時にshowDataDeleteConfirmViewを呼び出します。

//GameLayer.m
- (CCMenuItem*) createItem {
   CCMenuItemSprite* itemSpr = [CCMenuItemSprite ....];//ボタン作成
   [itemSpr setTarget:self selector:@selector(showDataDeleteConfirmView)];
   return itemSpr;
}

次に、showDataDeleteConfirmViewを実装します。普通に呼ぶだけで確認ポップアップが表示されます。

//GameLayer.m
- (void)showDataDeleteConfirmView {
   UIAlertView* confirmView =
      [[[UIAlertView alloc] initWithTitle: @"データを消していいですか?"
         message: @"消したデータは戻せません。"
         delegate: self
         cancelButtonTitle: @"だめ"
         otherButtonTitles: @"いいよ", nil] autorelease];
   [confirmView show];
}

最後に、UIAlertViewのタップ結果で呼び出される関数を作ります。delegateで設定した先にalertViewを記述します(この例ではGameLayer.m)。NSUserDefaultsのデータ全消去をさせています。

//GameLayer.m
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
   if (buttonIndex==[alertView cancelButtonIndex]) {
      return;
   }
   //データ消去
   NSString* domain = [[NSBundle mainBundle] bundleIdentifier];
   [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:domain];
}

と、これだけで実装終了です。簡単ですね。

もし同一レイヤ内にUIAlertViewが複数ある場合は、allertViewの内側で呼び出し元を判別し、処理します。

//UIAlertView呼び出し部分1
UIAlertView* view1 = ......
view1.tag = 1;
[show view1];

//UIAlertView呼び出し部分2
UIAlertView* view2 = ......
view2.tag = 2;
[show view2];

//alertView
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
   if (alertView.tag == 1) {
      //view1の処理
   }
   if (alertView.tag == 2) {
      //view2の処理
   }
}

関連記事
スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する
 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。