检测长触感

时间:2011-04-25 09:50:33

标签: cocos2d-iphone

我需要在游戏中检测到我想要制作的长时间触摸。我该怎么做? 我面临的其他问题是限制同时触摸。即如果用户一个接一个地触摸超过两次,精灵就不会跳跃 还有一种方法,我可以通过它添加触摸持续时间因素到精灵的跳跃高度?

由于

1 个答案:

答案 0 :(得分:5)

你怎么抓住你的触摸?我总是使用以下方法:

- (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;
    }