0

プレイヤーの動きを制御するためにボタンの深刻さを必要とする基本的なゲームを作ろうとしています。cocos-2d を使用していることを覚えておいてください。私の目標は、ボタンを押したままにし、押したときにスプライトを動かすことです。私が現在使用しているコードは次のようになります。

CCMenuItemHoldable.h

@interface CCMenuItemSpriteHoldable : CCMenuItemSprite {
    bool buttonHeld;
}

@property (readonly, nonatomic) bool buttonHeld;

CCMenuItemHoldable.m

@implementation CCMenuItemSpriteHoldable

@synthesize buttonHeld;

-(void) selected
{
    [super selected];
    buttonHeld = true;
    [self setOpacity:128];
}

-(void) unselected
{
    [super unselected];
    buttonHeld = false;
    [self setOpacity:64];
}

@end

そしてボタンの設定について

rightBtn = [CCMenuItemSpriteHoldable itemFromNormalSprite:[CCSprite spriteWithFile:@"art/hud/right.png"] selectedSprite:[CCSprite spriteWithFile:@"art/hud/right.png"] target:self selector:@selector(rightButtonPressed)];


CCMenu *directionalMenu = [CCMenu menuWithItems:leftBtn, rightBtn, nil];
[directionalMenu alignItemsHorizontallyWithPadding:0];
[directionalMenu setPosition:ccp(110,48)];
[self addChild:directionalMenu];

これはすべてうまくいくようですが、うまくいくと

-(void)rightButtonPressed:(id) sender
{

    if([sender buttonHeld])
            targetX = 10; 
        else{
            targetX = 0; 
        }   
}

クラッシュは修正されましたが、スプライトを動かそうとしています。私のゲーム ティック関数では、targetX の値をタイマーのスプライトの位置に追加しますが、動きはありません。

4

1 に答える 1

0

クラッシュについて質問するときは、常にクラッシュログを含めてください。

あなたの場合、私は問題を推測することができます。このセレクターを追加しています:

@selector(rightButtonPressed)

あなたのメソッドは呼び出されます

rightButtonPressed:(id)sender

これは、セレクターとして、rightButtonPressed:引数が渡されたことを示すコロンに注意してください。引数がないようにメソッドを変更するか、ボタンを作成するときにセレクターにコロンを追加します。

クラッシュログはこれを示します-受信クラスの名前とセレクターの名前とともに「認識されないセレクターが送信されました...」と表示されます。

于 2013-01-23T22:39:18.137 に答える