Sprite-kit:检测左右触摸

Posted

技术标签:

【中文标题】Sprite-kit:检测左右触摸【英文标题】:Sprite-kit: detecting left & right touches 【发布时间】:2015-08-22 10:06:15 【问题描述】:

在我尝试构建的新游戏中,我想知道用户何时触摸了屏幕的BOTH左右两侧来执行一些逻辑。

我的代码:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) 
    /* Called when a touch begins */

    for touch in (touches as! Set<UITouch>) 
        let location = touch.locationInNode(self)
        var isRight : Bool = false
        var isLeft : Bool = false

        if(location.x < self.size.width/2)
            isLeft = true
            println("Left")
        

        if(location.x > self.size.width/2)
            //
            isRight = true
            println("Right")
        
        if (isRight && isLeft)
            println("Both touched")
            // do something..
        
    

控制台:

Right
Left

我的代码似乎不起作用。我在这里做错了什么?有人有更好的解决方案吗?

【问题讨论】:

【参考方案1】:

这样做;

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) 
    /* Called when a touch begins */

   var isRight : Bool = false
   var isLeft : Bool = false

   for touch in (touches as! Set<UITouch>) 
        let location = touch.locationInNode(self)

        if(location.x < self.size.width/2)
            isLeft = true
            println("Left")
        

        if(location.x > self.size.width/2)
            //
            isRight = true
            println("Right")
        
    

   if (isRight && isLeft)
      println("Both touched")
      // do something..
   


更新:Swift 2.2

对于 SKView:

class skView:SKView 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) 
        /* Called when a touch begins */

        var isRight : Bool = false
        var isLeft : Bool = false

        for touch in touches 
            let location = touch.locationInView(self);

            if(location.x < self.frame.size.width/2)
                isLeft = true
                print("Left")
            

            if(location.x > self.frame.size.width/2)
                //
                isRight = true
                print("Right")
            
        

        if (isRight && isLeft)
            print("Both touched")
            // do something..
        

    

对于 SKNode:

class skNode: SKNode 
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) 
        var isRight : Bool = false
        var isLeft : Bool = false

        for touch in touches 
            let location = touch.locationInNode(self);

            if(location.x < self.frame.size.width/2)
                isLeft = true
                print("Left")
            

            if(location.x > self.frame.size.width/2)
                //
                isRight = true
                print("Right")
            
        

        if (isRight && isLeft)
            print("Both touched")
            // do something..
        
    

【讨论】:

这段代码在哪里;即它所指的“自我”是什么?

以上是关于Sprite-kit:检测左右触摸的主要内容,如果未能解决你的问题,请参考以下文章

Sprite-Kit:节点不会向左移动

Sprite-Kit:节点不会向左移动

触摸屏物体识别到底是怎么实现的

如何检测 UIView 上的触摸并检测单击哪个 UIView 类似于 UIButton 上的触摸?

如何检测iCarouselButtonDemo的触摸点?

苹果手机。在一个手指触摸屏幕时检测另一个手指触摸