iOS7 Sprite Kit如何在SKSpriteNode上进行长按或其他手势?

时间:2013-12-14 05:04:29

标签: ios objective-c sprite-kit gestures long-press

我正在构建基于精灵工具包的游戏,缺少“右键单击”实际上很难向用户传达一些重要信息。作为解决方案,我正在考虑手势,如长按,双指敲击等。

如何在SKSpriteNode上实现手势?

当触摸SKSpriteNode时,我正在使用这个来获得类似按钮的行为。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self selectSkill:YES];
}

3 个答案:

答案 0 :(得分:2)

UIGestureRecognizer之前,您保留了状态变量,用于跟踪触摸的位置和时间。这是一个快捷的解决方案,buttonTouched:是一种检查UITouch是否在您正在检查的按钮上的方法。

var touchStarted: NSTimeInterval?
let longTapTime: NSTimeInterval = 0.5

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    if let touch = touches.anyObject() as? UITouch {
        if buttonTouched(touch) {
            touchStarted = touch.timestamp
        }
    }
}

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
    if let touch = touches.anyObject() as? UITouch {
        if buttonTouched(touch) && touchStarted != nil {
            let timeEnded = touch.timestamp
            if timeEnded - touchStarted! >= longTapTime {
                handleLongTap()
            } else {
                handleShortTap()
            }
        }
    }
    touchStarted = nil
}

override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
    touchStarted = nil
}

答案 1 :(得分:1)

这是一个可以帮助https://github.com/buddingmonkey/SpriteKit-Components

的好组件

答案 2 :(得分:0)

没有简单的方法可以做到这一点,但我能想到的一种方法是在你的SKScene中添加一个子SKView,并将一个UIImageView放在SKView中。然后,您可以像SKView一样添加手势识别器。

这是我正在谈论的一个例子:

UIImageView *button = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ButtonSprite"]];

SKView *spriteNodeButtonView = [[SKView alloc] initWithFrame:CGRectMake(100, 100, button.frame.size.width, button.frame.size.height)];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(someMethod:)];
[spriteNodeButtonView addGestureRecognizer:tap];

[spriteNodeButtonView addSubview:button];

您可以将SKView放在任何位置,并使用SKView上的任何手势识别器:UITapGestureRecognizerUILongPressGestureRecognizerUISwipeGestureRecognizerUIPinchGestureRecognizer,{{1} },UIRotationGestureRecognizerUIPanGestureRecognizer

然后为你的方法实现做这样的事情:

UIScreenEdgePanGestureRecognizer