2011-04-25 111 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