根据UILongPressGesture持续时间移动Sprite

时间:2014-09-19 20:31:57

标签: objective-c cocos2d-iphone uigesturerecognizer

要点: 我正试图在用户按住屏幕时“向上”移动CCSprite。我正在使用Cocos2d v3.1并使用Xcode 5.1.1

我相信我应该使用UILongPressGestureRecognizer来识别用户何时按住屏幕。当我运行程序时,我在控制台中看到“已识别的保留”消息。 CCAction已完成。识别到Hold或LongPress后,精灵应向上移动,直到用户将手指从屏幕上抬起。

我还打算在游戏中使用点按和滑动手势。不应同时使用手势。

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longHold:)];
longPress.minimumPressDuration=1.0f;
[[[CCDirector sharedDirector] view] addGestureRecognizer:longPress];

-(void) longHold:(UILongPressGestureRecognizer*)gesture{
    CCLOG(@"Recognized Hold");

    if(gesture.state==UIGestureRecognizerStateBegan){
        id climb = [CCActionMoveBy actionWithDuration:2.0f position:ccp(0,25)];

        [_hero runAction:climb];
        CCLOG(@"Recognized Hold Action");
    }
    else{
        return;
    }

}

我倾向于在longHold方法中使用while语句而不是“if”语句。当我使用while语句时,精灵不会移动,当我从屏幕上抬起手指时,while循环继续执行,直到我停止程序。

这是我在控制台中看到的:

2014-09-19 16:22:25.591 asdf [39402:60b] Recognized Hold
2014-09-19 16:22:25.665 asdf [39402:60b] Recognized Hold Action
2014-09-19 16:22:25.666 asdf [39402:60b] Recognized Hold Action
2014-09-19 16:22:25.666 asdf [39402:60b] Recognized Hold Action
2014-09-19 16:22:25.666 asdf [39402:60b] Recognized Hold Action 

我应该使用以下方法:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    return YES;
} 

0 个答案:

没有答案