如何快速执行一个函数 5 秒

Posted

技术标签:

【中文标题】如何快速执行一个函数 5 秒【英文标题】:How to execute a function for 5 seconds in swift 【发布时间】:2020-04-03 13:40:04 【问题描述】:

我正在创建一个游戏,此功能用作缩小精灵的电源。我希望这个函数执行 5 秒,并将这个 5 秒计时器附加到标签上作为倒计时。 函数结束后,将精灵恢复到原来的大小。

该函数只是通过设置比例来缩小节点。

func shrinkShip() spaceShip.scale(to: CGSize(width: 60, height: 40))

【问题讨论】:

从技术上讲,您将两个问题合二为一。这些应该作为单独的问题提出。与您展示您为尝试此开始所做的工作。不要求别人为你做这件事 【参考方案1】:

坚持使用 SpriteKit 我只会做以下事情

func shrinkShip(duration: Double)  

    let originalSize = spaceShip.size

    spaceShip.scale(to: CGSize(width: 60, height: 40)) 

    for x in 0..<Int(duration) 

        //increment the timer every 1 second for the duration
        self.run(SKAction.wait(forDuration: 1 * Double(x))) 
            self.timerLabel.text = String(Int(duration) - x)
        
    
    self.run(SKAction.wait(forDuration: duration)) 
        //return the spaceship to full size
        self.spaceShip.scale(to: originalSize) 
        //hide the timer
        self.timerLabel.text = ""
        self.timerLabel.isHidden = true
    

【讨论】:

谢谢,尝试实现这个,收到错误Operator function '..&lt;' requires that 'Double.Stride' 抱歉,我在 Windows 电脑上即兴写了这个。我编辑并将其插入到 xcode 中,现在可以完美运行 我更改了 uit 将文本输出到标签的行。现在它倒退了,祝你好运【参考方案2】:

您可以像这样为视图设置动画:

UIView.animate(withDuration: 5, animations: 
        self.spaceShip.scale(to: CGSize(width: 60, height: 40))
,
completion:  _ in
    UIView.animate(withDuration: 2) 
        self.spaceShip.transform = .identity // Reset your view
    
)

【讨论】:

spaceShip 是一个 SKSpriteNode,无法执行转换...我可以将其重新缩放回原始大小吗?而不是做transform = .identity completion: self.spaceShip.scale(original) 【参考方案3】:

你可以试试这样的

UIView.animate(withDuration: 5, animations: 
        self.spaceShip.transform = CGAffineTransform(scaleX: 60, y: 40)
,
completion:  _ in
    UIView.animate(withDuration: 2) 
        self.spaceShip.transform = .identity // Reset your view
    
)

【讨论】:

以上是关于如何快速执行一个函数 5 秒的主要内容,如果未能解决你的问题,请参考以下文章

如何设置python 中函数 urlretrieve 下载文档,5秒没有下载完成就跳出执行下一次的下载?

如何制作一个循环或每 5 秒执行一次任务然后自行重置的东西?

在执行下一行之前等待 5 秒

lua脚本延迟10秒怎么写

PHP延迟执行函数

C# 要想给一个死循环设置循环时间间隔,每5秒循环一次。