Как последовательно обнаружить мультитач?

Попробовал проследить мультитач последовательно, вот что у меня получилось:

1.Создайте приложение cocos2d 2.Включите мультитач 3.Добавьте код в touchesBegin:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSSet *allTouches = [event allTouches];
    for (int i = 0; i < allTouches.count; i++) {

        UITouch *touch = [[allTouches allObjects] objectAtIndex:i];
        CGPoint touchLocation = [touch locationInView: [touch view]];
        CGPoint location = [[CCDirector sharedDirector]
                                              convertToGL:touchLocation];
        NSLog(@"allTouches %d %0.1f, %0.1f", (i + 1), location.x, location.y);
    }
}

Сначала я попробовал «[касание всех объектов]», но для этого требуется, чтобы мультитач выполнялся одновременно. Что я хочу здесь, так это получать мультитач одновременно. Поэтому я использовал [событие allTouches];

4. Я протестировал код, надев его на палец по одному, но выходная последовательность кажется произвольной (первый палец с маленьким xVal, а второй с большим xVal, интервал больше 2 с):

result 1:
2011-03-31 10:54:35.847 MultiTouchDemo[2788:207] allTouches 1 58.0, 458.0
2011-03-31 10:54:38.045 MultiTouchDemo[2788:207] allTouches 1 56.0, 453.0
2011-03-31 10:54:38.046 MultiTouchDemo[2788:207] allTouches 2 930.0, 429.0

result 2:
2011-03-31 10:55:11.659 MultiTouchDemo[2788:207] allTouches 1 86.0, 415.0
2011-03-31 10:55:13.378 MultiTouchDemo[2788:207] allTouches 1 965.0, 409.0
2011-03-31 10:55:13.380 MultiTouchDemo[2788:207] allTouches 2 84.0, 413.0

result 3:
2011-03-31 10:55:32.991 MultiTouchDemo[2788:207] allTouches 1 76.0, 453.0
2011-03-31 10:55:34.630 MultiTouchDemo[2788:207] allTouches 1 877.0, 430.0
2011-03-31 10:55:34.631 MultiTouchDemo[2788:207] allTouches 2 76.0, 455.0

result 4:
2011-03-31 10:55:45.960 MultiTouchDemo[2788:207] allTouches 1 94.0, 440.0
2011-03-31 10:55:47.134 MultiTouchDemo[2788:207] allTouches 1 92.0, 438.0
2011-03-31 10:55:47.136 MultiTouchDemo[2788:207] allTouches 2 934.0, 358.0

Таким образом, вы можете видеть, что указатель 2-го пальца в [allTouches allObjects] постоянно меняется.

Если я хочу, чтобы игра поддерживала многопользовательскую игру на одном устройстве, и я хочу отслеживать движения, которые они совершают, как я могу сделать это со всеми этими случайными позициями?

Надеюсь, кто-то может мне помочь, спасибо ^_^


person supersurabbit    schedule 31.03.2011    source источник


Ответы (1)


Вы можете хранить прикосновения самостоятельно. При первом вызове ccTouchesBegan сохраните все касания в своем списке. При последующих вызовах добавляйте любые касания, которых еще нет в вашем списке, в конец вашего списка. Затем, когда вызывается ccTouchesEnded, сотрите список.

person lins314159    schedule 31.03.2011