6

私はCCMenu5 CCMenuItems を持っています。ユーザーがメニュー項目に触れると、メニュー項目が右に 10 ピクセル移動して、他の項目と区別できるようにします。各メニュー項目をグローバル変数にしようとしたので、次のように言えますif (item.isSelected) { [item runAction:blah]; }。これまでの私のコードは次のとおりです。

CCLabelTTF *sin = [CCLabelTTF labelWithString:@"Single Player" dimensions:labelSize alignment:UITextAlignmentLeft fontName:font fontSize:20];
item1 = [CCMenuItemLabel itemWithLabel:sin target:self selector:@selector(goToSinglePlayer:)];

CCLabelTTF *spl = [CCLabelTTF labelWithString:@"Splitscreen" dimensions:labelSize alignment:UITextAlignmentLeft fontName:font fontSize:20];
item2 = [CCMenuItemLabel itemWithLabel:spl target:self selector:@selector(goToSplitscreen:)];

CCLabelTTF *ach = [CCLabelTTF labelWithString:@"Achievements" dimensions:labelSize alignment:UITextAlignmentLeft fontName:font fontSize:20];
item3 = [CCMenuItemLabel itemWithLabel:ach target:self selector:@selector(goToAchievements:)];

CCLabelTTF *str = [CCLabelTTF labelWithString:@"Store" dimensions:labelSize alignment:UITextAlignmentLeft fontName:font fontSize:20];
item4 = [CCMenuItemLabel itemWithLabel:str target:self selector:@selector(goToStore:)];

CCLabelTTF *set = [CCLabelTTF labelWithString:@"Settings" dimensions:labelSize alignment:UITextAlignmentLeft fontName:font fontSize:20];
item5 = [CCMenuItemLabel itemWithLabel:set target:self selector:@selector(goToSettings:)];

CCMenu * mainMenu = [CCMenu menuWithItems:item1, item2, item3, item4, item5, nil];

[mainMenu setColor:ccBLACK];
[mainMenu alignItemsVerticallyWithPadding:10];
mainMenu.position = ccp(90, 90);

[self addChild:mainMenu];

if (item1.isSelected) {
    [item1 runAction:[CCMoveTo actionWithDuration:1.0f position:ccp(120, 90)]];
}

私の質問は、どうすれば前述の効果を達成できるでしょうか? ユーザーがタッチしたが離さないときに選択CCMenuItemしたものを右に10ピクセル移動し、タッチがそのメニュー項目を離れたときに通常の位置に戻るようにします。また、このアニメーション コードはどこに配置すればよいですか? 私のinit機能では?助けてくれてありがとう

4

2 に答える 2

9

CCMenuItemLabel オブジェクトの「すぐに使える」動作を変更したい場合は、cocos2d の特定のクラスをサブクラス化する必要があります。オーバーライドする必要があるメソッドは次のとおりです。

-(void) selected{
    // coco's default is to scale up by 10%
    // place your code to displace the label.
    self.position=ccp(self.position.x-10,self.position.y);
}

-(void) unselected{
   // coco's default is to bring back scale to originalScale.
   self.position=ccp(self.position.x+10,self.position.y);
}

'selected' メソッドは、指がラベルに触れると呼び出されます。'unselected' メソッドは、指を離すか、ラベルの外にドラッグすると呼び出されます。選択された/選択されていない動作への基本的な (非常に) アプローチを示しました。それを試してみてください。関連するタイミングの問題があります。このような最初の試みとしてアニメーションを使用することは避けたいと思います。アニメーションの例が必要な場合は、CCMenuItemLabel クラスのコードを見てください。

于 2012-05-07T11:50:55.150 に答える
7

次の 2 行のコードを確認してください。

    CCMenuItem *item31 = [CCMenuItemImage itemFromNormalImage:@"btn_on.png" selectedImage:@"btn_on_hover.png"];
    CCMenuItem *item32 = [CCMenuItemImage itemFromNormalImage:@"btn_off.png" selectedImage:@"btn_off_hover.png"];
  • 上記のコードのように、btn_on_hover.pngを調整して、右側または必要な場所に 10px のオフセットがあるように見せることができます。
  • cocos2d はオープン ソースであるため、さまざまな方法でタスクを達成できます。CCMenu.hクラスを確認します。要件に応じてクラスを変更できます。
  • たとえば、 CCMenu.hクラスの次のコード フラグメントを変更できます。

        #pragma mark Menu - Touches
        #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
    

ご不明な点がございましたら、お知らせください。よろしく、ニール。

于 2012-05-07T05:02:13.550 に答える