2011-04-25 119 views
1

我需要在游戏中检测我想要做的游戏中的长时间触摸。我该怎么做?
我面临的其他问题是限制同时触摸。即如果用户一个接一个地触及两次以上,则精灵不会跳跃。
也是他们的一种方式,我可以添加触摸持续时间因素的精灵跳跃的高度?检测长时间触摸

谢谢

回答

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]; 

一个实例变量开始时间,或者检查是否触摸属于某个对象:

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; 
    } 
+0

Thanks.But如何开始时间表示触摸的开始? – Nitish 2011-04-25 10:10:26

+1

In - (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)事件 您会发现被触摸的对象,然后将其设置为可变的startTime。 - (void)ccTouchEnded:(UITouch *)touchx withEvent:(UIEvent *)事件结束时相同。你只需要自己发送每一个触摸,并检查是什么意思。但这几乎自动完成,如果你使用这些方法... ... - >不要忘记\t \t [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:theEnemy优先级:0 swallowsTouches:YES];因此,敌人可以吞噬敌人的地方是敌人敌人 – user387184 2011-04-25 10:17:18

+0

Thanks.I得到你所说的。让我执行上述。 – Nitish 2011-04-25 10:22:47