CCMenuItem, CCMenuを使って簡単なメニューを作成します。
メニュー項目が選択された際の処理方法として、
- 別々のメソッドで処理する(最初から分岐)
- 1つのメソッドで処理する(内部で分岐)
の2つが考えられます。
別々のメソッドで処理を行う場合
それぞれのメニュー項目ごとに異なるメソッドを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
-(id) init { if( (self=[super init]) ) { CCMenuItem *item1 = [CCMenuItemFont itemWithString:@"item-1" target:self selector:@selector(selectedMenuItem1:)]; CCMenuItem *item2 = [CCMenuItemFont itemWithString:@"item-2" target:self selector:@selector(selectedMenuItem2:)]; CCMenuItem *item3 = [CCMenuItemFont itemWithString:@"item-3" target:self selector:@selector(selectedMenuItem3:)]; CCMenu *menu = [CCMenu menuWithItems:item1, item2, item3, nil]; [menu alignItemsVerticallyWithPadding:20]; [self addChild:menu]; } return self; } - (void) selectedMenuItem1:(id)sender { printf("selected item-1\n"); } - (void) selectedMenuItem2:(id)sender { printf("selected item-2\n"); } - (void) selectedMenuItem3:(id)sender { printf("selected item-3\n"); } |
1つのメソッドで処理をおこなう場合
あらかじめ、メニュー項目ごとにtagプロパティにユニークな値を設定してきます。
メニュー項目が選択された際に呼ばれるメソッド内でtagプロパティの値を参照し、どの項目が選択されたかを知る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
-(id) init { if( (self=[super init]) ) { CCMenuItem *item1 = [CCMenuItemFont itemWithString:@"item-1" target:self selector:@selector(selectedMenuItem:)]; item1.tag = 1; CCMenuItem *item2 = [CCMenuItemFont itemWithString:@"item-2" target:self selector:@selector(selectedMenuItem:)]; item2.tag = 2; CCMenuItem *item3 = [CCMenuItemFont itemWithString:@"item-3" target:self selector:@selector(selectedMenuItem:)]; item3.tag = 3; CCMenu *menu = [CCMenu menuWithItems:item1, item2, item3, nil]; [menu alignItemsVerticallyWithPadding:20]; [self addChild:menu]; } return self; } - (void) selectedMenuItem:(id)sender { CCMenuItem *item = (CCMenuItem *)sender; printf("selected item-%d\n", item.tag); } |
使い分け
選択されたアイテムによって、明らかに異なる処理をする場合は前者。
処理の程度を変えるような場合は、後者が向いているでしょうか。
コメントを残す
コメントを投稿するにはログインしてください。