2010-05-22 1 views
1

Я знаю, что я, вероятно, разместил три вопроса, связанных с этим, а затем удалил их, но это только потому, что я решил их до того, как получил ответ. Но, этого я не могу решить, и я не верю, что это так сложно по сравнению с другими. Итак, с дальнейшим обожанием, вот моя проблема:Проблема с обнаружением столкновений в квадрате (iPhone)

Так что я использую Cocos2d, и одна из главных проблем заключается в том, что у них нет кнопок. Чтобы компенсировать отсутствие кнопок, я пытаюсь обнаружить, что если касание закончилось, оно столкнулось с квадратом (кнопка). Вот мой код:

- (void)ccTouchesEnded:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 
    NSLog(@"%f", 240-location.y); 
    if (isReady == YES) 
    { 
     if (((240-location.y) <= (240-StartButton.position.x - 100) || -(240-location.y) >= (240-StartButton.position.x) + 100) && ((160-location.x) <= (160-StartButton.position.y) - 25 || (160-location.x) >= (160-StartButton.position.y) + 25)) 
     { 
      NSLog(@"Coll:%f", 240-StartButton.position.x); 
      CCScene *scene = [PlayScene node]; 
      [[CCDirector sharedDirector] replaceScene:[CCZoomFlipAngularTransition transitionWithDuration:2.0f scene:scene orientation:kOrientationRightOver]]; 
     } 
    } 
} 

Знаете ли вы, что я делаю неправильно?

+0

Не уверен, что это специально, но похоже, что некоторые из ваших переменных переключаются ближе к концу. Вы сравниваете x с y. –

+0

@ Ed Marty: Да, это было бы специально ... – 2010-05-22 05:23:29

+0

Вы не объяснили, что случилось. Разве это не соответствует? Соответствует ли это, когда это не должно быть? Вы вообще не участвуете? Кроме того, вы установили точку останова и шагнули через нее, чтобы увидеть, какие значения принимают переменные? –

ответ

0

Почему бы вам не только сделать

if (isReady == YES) 
{ 
    if (CGRectContainsPoint([StartButton boundingBox],location)) 
    { 

     CCScene *scene = [PlayScene node]; 
     [[CCDirector sharedDirector] replaceScene:[CCZoomFlipAngularTransition transitionWithDuration:2.0f scene:scene orientation:kOrientationRightOver]]; 
    } 
} 

[StartButton BoundingBox] возвращает CGRect узла и CGRectContainsPoint проверяет, есть ли место CGPoint находится внутри кнопки.

+0

Спасибо, я попробовал ваш код и только должен был сделать небольшую смену создания переменной inverseLocation, которая перевернула координаты местоположения из-за того, что iphone поворачивается во время игры и использует это вместо места. – 2010-05-22 22:00:40