触摸事件 Cocos2d iPhone

Posted

技术标签:

【中文标题】触摸事件 Cocos2d iPhone【英文标题】:Touch event Cocos2d iPhone 【发布时间】:2014-02-18 12:17:10 【问题描述】:

我对 cocos2d 中的触摸事件有疑问,特别是: 我有两层:

GameLayer.m



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

           NSLog(@"GAME");

           CCSprite*game=[CCSprite spriteWithFile:@"alien.png"];
           CGSize size=[CCDirector sharedDirector].winSize;
           self.contentSize=CGSizeMake(50,50);
           self.touchEnabled=YES;
           game.position=CGPointMake(40,40);
           [self addChild:game];
           //NSLog(@"%d",[[self children] count]);
           //NSLog(@"%f",self.position.x);
            
            return self;
        
    -(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    
       NSLog(@"GAME");
    



UserInterfaceLayer.m


    -(id)init
            

               if(self=[super init])
               

                  NSLog(@"USER");
                  self.touchEnabled=YES;
                  CCSprite*game=[CCSprite spriteWithFile:@"spiders.png"];
                  CGSize size=[CCDirector sharedDirector].winSize;
                  self.contentSize=CGSizeMake(20,20);
                  game.position=CGPointMake(40,40);
                  [self addChild:game];
                  //NSLog(@"%d",[[self children] count]);
                  //NSLog(@"%f",self.position.x);

               

               return self;

            


        -(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
        
           NSLog(@"USER");
        

两者都是一个场景的孩子:

MultiLayerScene.m

-(id)init

    if(self=[super init])
    
       sharedMultiLayerScene = self;
       self.contentSize=CGSizeMake(30, 30);

       CGSize size=[CCDirector sharedDirector].winSize;


       // The GameLayer will be moved, rotated and scaled independently
       GameLayer* gameLayer = [GameLayer node];
       gameLayer.position=CGPointMake(250,250);
       [self addChild:gameLayer z:1 tag:1];
       //gamelayerposition = gameLayer.position;



       // The UserInterfaceLayer remains static and relative to the screen area.
       UserInterfaceLayer* uiLayer = [UserInterfaceLayer node];
       uiLayer.position=CGPointMake(-100, -100);
       [self addChild:uiLayer z:-1 tag:2];


    
   return self;

我的问题是我在他们的 ccTouchesBegan 事件运行的任何位置触摸屏幕。 例如,如果我只在 GameLayer 上触摸,则同时运行 GameLayer 触摸事件和另一个。 我也尝试将这两层插入两个不同的位置(从代码中可以看出),但问题仍然存在。 我该如何解决这个问题? 我想,例如,如果我触摸 Gamelayer 只响应它的触摸事件。

【问题讨论】:

【参考方案1】:

试试这个

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

优先级:数字越小 = 优先级越高。

【讨论】:

好的,谢谢Haroon,你解决了我的问题,但我不明白一件事:如果我在屏幕运行的任何一点触摸,你能解释一下为什么(场景是30x30(小))图层的触摸事件?(没有你的解决方案) 我尝试检索 CCScene 的 boundingbox 并将其分层为 CGRectZero 而不是任何其他值,所以不知道为什么它是 30 X 30 因为我知道的是 CCSceneCCLayer两者都没有boundingbox

以上是关于触摸事件 Cocos2d iPhone的主要内容,如果未能解决你的问题,请参考以下文章

cocos2d-x 3.x 触摸事件

使用iPhone应用程序中的过渡移动要触摸的对象

没有事件处理的触摸检测

向 UIButton iPhone 添加特定的触摸事件

如何向 iPhone OS 发送触摸事件? [复制]

iPhone - 在屏幕上绘图以响应触摸事件