2014-09-19 96 views
1

在我的遊戲中,我有兩種類型的手勢;一個輕拍和一個按住。當我將手指放在屏幕上時,會導致調用touchBegan:(UITouch *)touch withEvent:(UIEvent *)event,因爲我的tapper方法也被調用,因此兩個手勢都被調用。我怎樣才能避免這個問題?我必須使用UIGestureRecognizers還是有辦法使用內置的cocos2d方法?我需要這些手勢被專門稱呼,而不是相互結合。如何區分輕按和按住?

typedef NS_ENUM(NSUInteger, BPMovementState) { 
    kTouchUp, //Finger is not on the screen 
    kTouchDown //Finger is on the screen 
}; 

@implementation HelloWorldScene 
{ 
    CCSprite *_hero; 
    BPMovementState _touchState; 
} 

- (instancetype)init 

    self = [super init]; 
    if (!self) return(nil); 

    // Enable touch handling on scene node 
    self.userInteractionEnabled = YES; 

    _touchState = kTouchUp; 

    return self; 
} 

- (void)fixedUpdate:(CCTime)delta{ 

    if(_touchState == kTouchDown){ 
     //_hero slide 
     _hero.position = ccp(_hero.position.x + 1, _hero.position.y); 
    } 

} 

-(void) touchBegan:(UITouch *)touch withEvent:(UIEvent *)event { 

    _touchState = kTouchDown; 
    if(touch.tapCount == 1) 
     [_hero jump] 

} 

- (void)touchEnded:(UITouch *)touch withEvent:(UIEvent *)event{ 


    _touchState = kTouchUp; 

} 
+0

您可以注意觸摸開始和觸摸結束之間的時間。之後,您可以自定義識別輕觸並按住的條件。 – Renaissance 2014-09-19 23:44:16

+1

水龍頭是友誼的象徵。持有是愛的標誌。 – quellish 2014-09-20 03:16:07

回答

1

它可以通過以下方式實現。

定義在報頭中的計時器即touchTimer

在touchBegan啓動定時器

touchTimer = [的NSTimer scheduledTimerWithTimeInterval:延遲目標:自選擇器:@selector(touchHasBeenHeld :) USERINFO:無重複:NO];

如果計時器到期並且觸發釋放之前調用選擇器-touchHasBeenHeld標識。其舉辦活動。 在這裏你也使計時器無效。

否則,如果調用了-touchEnded並且定時器仍然有效,那麼它是一個觸摸事件。 您再一次使計時器無效。

0

如果可以,我會堅持UIGestureRecognizer。蘋果的手勢識別器被調整爲讓用戶感到熟悉。如果您自己創建,則您的時間或閾值可能會略有不同,並且對習慣於系統默認設置的用戶而言,手勢會感到不可思議。 Here是向cocos2d項目添加UIGestureRecognizer的快速教程。