在Swift中创建多个倒计时器

时间:2016-04-26 21:03:40

标签: ios swift sprite-kit

好的,所以我试图在一个标签中添加一个2秒的倒数计时器,只要用户双击屏幕就会激活。 因此,在重叠时,用户会找到一个用数​​字“2”创建的新标签,然后是第二个“1”,然后是“0”。

我只需1个计时器就能做到这一点。当用户双击以创建第二个或更多计时器时,应用程序崩溃。

我发现这是由于在类中而不是在函数中声明变量,以允许计时器函数检索此类声明作为标签。 如果我找到了一种方法来使计时器功能在另一个函数中而不是在类中,它将正常工作。

所以这里的代码仅在部署1个计时器时有效。

在课程中:

var BTTimer = NSTimer ()
var BTCounter = 2 
let BT = SKLabelNode

在功能触动下开始:

let B = SKSpriteNode(imageNamed: "B 110.png")
let Touch : UITouch! = touches.first
let TouchLocation = Touch.locationInNode(self)
let PreviousTouchLocation = Touch.previousLocationInNode(self)

let Player = childNodeWithName("Player") as! SKSpriteNode

let xPos = Player.position.x + (TouchLocation.x - PreviousTouchLocation.x)
let yPos = Player.position.y + (TouchLocation.y - PreviousTouchLocation.y)

B.position = CGPointMake(xPos, yPos)
B.zPosition = -2
self.addChild(B)


BT.fontSize = 27;
BT.fontColor = UIColor.redColor()
BT.position = CGPointMake(xPos - 9, yPos - 30)
BT.zPosition = -1
self.addChild(BT)
BT.text = String(BTCounter);
BTTimer = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: #selector(GameScene.updateBCounter), userInfo: nil, repeats: true)

    }
    }

现在在同一个类的另一个函数下:

func updateBCounter() {
    if(BTCounter > 0) {
        BTCounter-=1
        BT.text = String(BTCounter)
    }
    else if(BTCounter == 0) {
        //Remove B
        //Place C
    }

我希望改变这一点,以便用户能够生成他希望部署的计时器。

1 个答案:

答案 0 :(得分:0)

您可以像这样更新updateBCounter:

func updateBCounter(timer: NSTimer)

您的选择器已更改为#selector(GameScene.updateBCounter(_:)

当您安排计时器时,您可以将userInfo设置为任何字典,并且发送给updateBCounter的计时器会将其置于其userInfo属性中。

我不确切地知道你想要做什么,但是这些工具可以让多个计时器同时调用相同的选择器,但知道你正在处理哪一个。

取消跟踪事物的属性,并在userInfo字典中创建键。

您可以将任何对象用作userInfo(而不仅仅是字典),因此您也可以这样做:

class TimerData {
   var counter: Int
   var l: SKLabelNode
}