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