我有一款适用于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:是的,我知道这是一个难题......只是一个挑战:)
答案 0 :(得分:1)
UITouch对象是持久的。通过触摸保持对touchesBegan中找到的精灵的名称的引用。
类属性:
var touchesToSprites = [UITouch:Int]()
in touchesBegan:
touchesToSprites[touch] = spriteTouched
in touchesEnded:
action1( touchesToSprites[touch], spriteTouched )
// remove touchesToSprites[touch] when done