как ты хватаешься?Я всегда использую следующие методы:
- (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;
}