Как обращаться с мультитач - PullRequest
0 голосов
/ 22 сентября 2011

Я пишу приложение в xcode, используя box2d. Прямо сейчас я использую код ниже. Проблема в том, что он будет обрабатывать только одно касание. Как я могу заставить свой код обрабатывать все события касания, в этом случае проверяйте местоположение каждого касания. Я также хочу сохранить прикосновения, чтобы, когда они заканчиваются, я мог использовать соответствующий код, чтобы завершить все начатые прикосновения.

-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *myTouch = [touches anyObject];
    CGPoint location = [myTouch locationInView:[myTouch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];
    b2Vec2 locationWorld = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);
    CGSize screenSize = [CCDirector sharedDirector].winSize;

    if (locationWorld.x >= screenSize.width*2/5/PTM_RATIO && locationWorld.x <= screenSize.width*3.25/5/PTM_RATIO) {
        //do something
    }
    else if (0 && locationWorld.x <= screenSize.width*2/5/PTM_RATIO) {
        //do something else

    }
}

Ответы [ 4 ]

1 голос
/ 22 сентября 2011

Количество пальцев, соприкасающихся с экраном, можно получить с помощью:

NSSet *touchEvents = [event allTouches];

Вы можете получить каждое прикосновение к отдельному местоположению, многократное нажатие и т. Д., Используя и перечисляя цикл и пошаговое выполнение touchEvents.

1 голос
/ 22 сентября 2011

В дополнение к итерации набора касаний вам необходимо убедиться, что в представлении включен мультитач.Это можно сделать в Интерфейсном Разработчике / Xcode 4

1 голос
/ 22 сентября 2011

Это должно быть примерно так:

- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
    for (UITouch *touch in touches) 
    {
        if (touch.phase == UITouchPhaseBegan) 
        {
            // Insert code here
        }
    }
}
0 голосов
/ 19 ноября 2013

В COCOS2D-X

void LayerHero::ccTouchesEnded(CCSet* touches, CCEvent* event)
{
CCTouch* touch = (CCTouch*)( touches->anyObject() );
CCPoint location = touch->getLocationInView();
location = CCDirector::sharedDirector()->convertToGL(location);
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();

if(location.x<visibleSize.width/2)
{

}
 else if(location.x>visibleSize.width/2)
 {
    CCLOG("We are in the touch2 %f",location.x);

  }
}
...