0

Cocos2d for iPhone を使用してゲームを作成しています。現在、タッチ入力を機能させようとしています。マルチレイヤーシーンの独立したコントロールレイヤーでタッチ応答を有効にしましたが、正常に動作しています-タッチが別のレイヤーにあるスプライトの上にある場合にのみタッチメソッドを起動することを除いて(別のレイヤーは実際には単なるノードです)。そのスプライト以外に画面上のコンテンツはありません。

これが私のコントロールレイヤーの実装です:

#import "ControlLayer2.h"

extern int CONTROL_LAYER_TAG;
@implementation ControlLayer2
+(void)ControlLayer2WithParentNode:(CCNode *)parentNode{
    ControlLayer2 *control = [[self alloc] init];
    [parentNode addChild:control z:0 tag:CONTROL_LAYER_TAG];
}

-(id)init{
    if (self=[super init]){

        [[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:self priority:0    swallowsTouches:YES];
    }
    return self;
}

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{
    CCLOG(@"touchbegan");
    return YES;
}

@end

内部にスプライトがある子ノードを含むレイヤーを次に示します。

extern int PLAYER_LAYER_TAG;

int PLAYER_TAG = 1;

@implementation PlayerLayer
//reduces initializing and adding to the gamescene to one line for ease of use
+(void)PlayerLayerWithParentNode:(CCNode *)parentNode{
    PlayerLayer *layer = [[PlayerLayer alloc] init];
    [parentNode addChild:layer z:1 tag:PLAYER_LAYER_TAG];
}

-(id)init{
    if(self = [super init]){
        //add the player to the layer, know what I'm sayer(ing)?
        [Player playerWithParentNode:self];
    }
    return self;
}

@end

そして最後に、それらの両方を含むシーン:

int PLAYER_LAYER_TAG = 1;
int CONTROL_LAYER_TAG = 2;
@implementation GameScene

+(id)scene{
    CCScene *scene = [CCScene node];
    CCLayer *layer = [GameScene node];
    [scene addChild:layer z:0 tag:0];
    return scene;
}

-(id)init{
    if(self = [super init]){
        //[[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:[self getChildByTag:0] priority:0 swallowsTouches:YES];
        //add the player layer to the game scene (this contains the player sprite)
        [ControlLayer2 ControlLayer2WithParentNode:self];
        [PlayerLayer PlayerLayerWithParentNode:self];

    }
    return self;
}

@end

コントロールレイヤーがすべてのタッチ入力に応答するようにするにはどうすればよいですか?

4

1 に答える 1

1

init メソッドにこのコードを追加します。

self.touchEnabled = YES;

そして、このccTouchesBeganを使用してください

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *myTouch = [touches anyObject];
    CGPoint location = [myTouch locationInView:[myTouch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    //handle touch
}

コードから次の行を削除します。

  [[[CCDirector sharedDirector]touchDispatcher] addTargetedDelegate:self priority:0    swallowsTouches:YES];

更新: 完全なコードはこちら

于 2013-03-16T16:48:06.823 に答える