不知道如何处理单个实体的触摸

时间:2015-09-03 15:05:10

标签: ios swift sprite-kit

我有一款适用于iPad的游戏,其中两个不同的玩家可以同时与环境互动。当同一个设备中的两个人同时玩游戏时,我遇到了一个我不知道如何解决的问题。我希望游戏能够以下一种方式运行:当玩家触摸精灵,并在另一个精灵中完成触摸时,应用程序必须能够知道它是同一个玩家。

我的应用现在做的是以下内容:假设player1接触精灵。然后,player2触及另一个。他们都没有完成触摸。现在,player1以第三个精灵结束他的触摸。但是,使用我现在拥有的代码,当我需要传递第一个和第三个精灵时,我们要做的是用第二个和第三个精灵调用函数“action”,我吓坏了很少因为我不知道怎么做。这是您需要的代码:

var globalReference: Int = 0

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    let touch: UITouch! = touches.first as UITouch!
    let touchLocation = touch.locationInNode(self)
    var spriteTouched: Int? = 0

    if self.nodeAtPoint(touchLocation).name != nil {
        spriteTouched = Int(self.nodeAtPoint(touchLocation).name!)
        globalReference = spriteTouched
    }
}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
    let touch: UITouch! = touches.first as UITouch!
    let touchLocation = touch.locationInNode(self)
    var spriteTouched: Int? = 0
    if self.nodeAtPoint(touchLocation).name != nil {
         spriteTouched = Int(self.nodeAtPoint(touchLocation).name!){
         if(globalReference != spriteTouched) {
            action1(globalReference, spriteTouched)
         } else {
             action2(globalReference)
            }
        }
    }
}

我知道sprite被触及的方式是使用“.name”,其中名称始终是Int。我使用变量globalReference来知道touchesEnded中touchesBegan触摸了哪些sprite,而且,这个实现是我真正不知道如何解决的。考虑一些罕见的情况,例如当你没有触摸精灵解决时。 如果有人可以帮我一点,我将不胜感激......

谢谢!

PS:是的,我知道这是一个难题......只是一个挑战:)

1 个答案:

答案 0 :(得分:1)

UITouch对象是持久的。通过触摸保持对touchesBegan中找到的精灵的名称的引用。

类属性:

var touchesToSprites = [UITouch:Int]()

in touchesBegan:

touchesToSprites[touch] = spriteTouched

in touchesEnded:

action1( touchesToSprites[touch], spriteTouched )
// remove touchesToSprites[touch] when done