Обнаружить долгое касание - PullRequest
1 голос
/ 25 апреля 2011

Мне нужно обнаружить долгое касание в игре, которую я пытаюсь сделать. Как я могу это сделать?
Другая проблема, с которой я сталкиваюсь, - это ограничение одновременных касаний. т. е. спрайт не будет прыгать, если пользователь коснется более двух раз один за другим.
Также есть способ, которым я могу добавить коэффициент продолжительности касания к высоте прыжка, который делает спрайт?

Спасибо

1 Ответ

5 голосов
/ 25 апреля 2011

как ты хватаешься?Я всегда использую следующие методы:

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

- (void)ccTouchMoved:(UITouch *)touchx withEvent:(UIEvent *)event

- (void)ccTouchEnded:(UITouch *)touchx withEvent:(UIEvent *)event

И в этих методах вы можете получить полный контроль над всеми касаниями.Например, запомните время начала касания:

self.startTime = [NSDate date];

для переменной экземпляра startTime или чтобы проверить, принадлежит ли касание определенному объекту:

 CGRectContainsPoint(self.rect, [self convertTouchToNodeSpaceAR:touch]);

Таким образом, вы можете легкореализовать свою сенсорную логику так, как вам нравится ...

Хороший способ сделать это - я нахожу - определить все необходимые переменные в объекте игры, например ...

@interface Enemy : CCSprite <CCTargetedTouchDelegate> {

    EnemyState state;
    NSInteger enemyID;
    NSDate *startTime;
    NSDate *endTime;

    UITouch *lastTouch; 

ДОБАВЛЕНО ПОКАЗАТЬ БЕТОННЫЙ ПРИМЕР КОДА ДЛЯ ccTouchBegan:

   - (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
    {
        D_DBG (@"ENEMY ID %i",self.enemyID);

//implement your logic if a touch for this enemy is allowed or not
        if (![self.delegate touchIsAllowed: enemyID touch: touch]) return NO;

//if the enemy is untouched, then may be touched
        if ((state == kEnemyStateUngrabbed) &&  (![self containsTouchLocation:touch] )) return NO;

        state = kEnemyStateGrabbed;
        self.startTime = [NSDate date];
        [self.delegate  informAboutEnemyStarted: self.enemyID startTime: self.startTime atPoint: self.position];
    return YES;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...