2011-11-25 68 views
1

我做了这个ccTouchBegin方法:ccTouchBegin触摸点不被正确读取

- (BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event { 



    CGPoint location = [touch locationInView:[touch view]]; 
    location = [[CCDirector sharedDirector] convertToGL:location]; 

    CGPoint pos = [self getChildByTag:1].position; 


    CGSize size = [self getChildByTag:1].contentSize; 
    float padding = 3; 
    float w = size.width+padding*2; 
    float h = size.height+padding*2; 

    // first row 
    CGRect rect1 = CGRectMake(pos.x-w/2, pos.y-h/2, w/3, h/3); 
    CGRect rect2 = CGRectMake(pos.x-(w*(2/3)/2), pos.y-h/2, w/3, h/3); 
    CGRect rect3 = CGRectMake(pos.x+(w*(2/3)/2), pos.y-h/2, w/3, h/3); 
    //second row 
    CGRect rect4 = CGRectMake(pos.x-w/2, pos.y-(h*(2/3)/2), w/3, h/3); 
    CGRect rect5 = CGRectMake(pos.x-(w*(2/3)/2), pos.y-(h*(2/3)/2), w/3, h/3); 
    CGRect rect6 = CGRectMake(pos.x+(w*(2/3)/2), pos.y-(h*(2/3)/2), w/3, h/3); 
    //third row 
    CGRect rect7 = CGRectMake(pos.x-w/2, pos.y+(h*(2/3)/2), w/3, h/3); 
    CGRect rect8 = CGRectMake(pos.x-w/2, pos.y+(h*(2/3)/2), w/3, h/3); 
    CGRect rect9 = CGRectMake(pos.x-w/2, pos.y+(h*(2/3)/2), w/3, h/3); 


    if (CGRectContainsPoint(rect1, location)) { 
     NSLog(@"rect1"); 
    } else if (CGRectContainsPoint(rect2, location)) { 
     NSLog(@"rect2"); 
    } else if (CGRectContainsPoint(rect3, location)) { 
     NSLog(@"rect3"); 
    } else if (CGRectContainsPoint(rect4, location)) { 
     NSLog(@"rect4"); 
    } else if (CGRectContainsPoint(rect5, location)) { 
     NSLog(@"rect5"); 
    } else if (CGRectContainsPoint(rect6, location)) { 
     NSLog(@"rect6"); 
    } else if (CGRectContainsPoint(rect7, location)) { 
     NSLog(@"rect7"); 
    } else if (CGRectContainsPoint(rect8, location)) { 
     NSLog(@"rect8"); 
    } else if (CGRectContainsPoint(rect9, location)) { 
     NSLog(@"rect9"); 
    } 

    return YES; 
} 

它的简单,它采用触摸点,然后得到一个孩子的contentsize和位置并划分那里的孩子所在的地方组成一个3x3的表格。但现在它不工作,即使我尝试触摸整个屏幕,我也没有收到任何NSLog。任何想法什么是错的?

回答

2
  1. Learn how to set a breakpoint。断点允许您立即测试一个方法或一行代码是否正在执行。
  2. 除非您使用CCTargetedTouchHandler作为CCLayer中触摸的默认处理程序,否则不会调用ccTouchBegan方法。要做到这一点,覆盖registerWithTouchDispatcher在CCLayer类,但不调用父类的实现:

-(void) registerWithTouchDispatcher 
{ 
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self 
                priority:0 
              swallowsTouches:NO]; 
} 

你并不需要删除的委托。 CCLayer类为您处理。

+0

这解决了我的问题 - 谢谢! – Greg