точки касания ccTouchBegin не читаются должным образом - PullRequest
1 голос
/ 25 ноября 2011

Я сделал этот метод 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;
}

это просто, он берет точку соприкосновения, а затем получает размер и положение дочернего элемента и делит место, где расположен дочерний элемент, для формирования таблицы 3x3. но сейчас это не работает, и я не получаю никаких NSLogs, даже когда я пытаюсь коснуться всего экрана. Любая идея, что не так?

1 Ответ

2 голосов
/ 25 ноября 2011
  1. Узнайте, как установить точку останова . Точки останова позволяют мгновенно проверить, выполняется метод или строка кода или нет.
  2. Метод ccTouchBegan не вызывается, если вы не используете CCTargetedTouchHandler в качестве обработчика по умолчанию для касаний в вашем CCLayer. Для этого переопределите registerWithTouchDispatcher в вашем классе CCLayer, но не вызывайте супер реализацию:

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

Вам не нужно удалять делегата. Класс CCLayer справится с этим за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...