在swift场景中设置节点计时器
我有一个场景,其中包含一个类名称ballNode(),它声明了ball及其属性。现在,我希望每定义一秒,一个球就会产生一个帧。我读了一些关于如何做的书,意识到我需要设置一个计时器。所以我读了一篇教程,看了一些关于它的视频。在我学习教程的过程中,我最终得到了以下代码:在swift场景中设置节点计时器,swift,timer,sprite-kit,nodes,nstimer,Swift,Timer,Sprite Kit,Nodes,Nstimer,我有一个场景,其中包含一个类名称ballNode(),它声明了ball及其属性。现在,我希望每定义一秒,一个球就会产生一个帧。我读了一些关于如何做的书,意识到我需要设置一个计时器。所以我读了一篇教程,看了一些关于它的视频。在我学习教程的过程中,我最终得到了以下代码: class GameScene: SKScene, SKPhysicsContactDelegate { var tim = Timer() override func didMove(to view: SKView) {
class GameScene: SKScene, SKPhysicsContactDelegate {
var tim = Timer()
override func didMove(to view: SKView) {
self.physicsWorld.gravity = CGVector(dx: 0, dy: -9.8)
physicsWorld.contactDelegate = self
tim = Timer.init(timeInterval: 0.5, target: self, selector: #selector(createSmallBall) , userInfo: nil, repeats: true)
let sceneBody = SKPhysicsBody.init(edgeLoopFrom: self.frame)
sceneBody.friction = 0
self.physicsBody = sceneBody
}
@objc func createSmallBall(){
let smallBall = BallNode(radius: 30)
smallBall.position.x = 100
smallBall.position.y = 200
self.addChild(smallBall)
}
虽然我按照指示操作(并将其调整为swift 4-选择器问题),但我仍然没有在我的框架上看到任何球
我花了2个小时寻找这个问题,但找不到它(CreateSallball正在工作-我通过在touchesbegin()中设置它来检查这个问题)
有人能发现我做错了什么吗?经过大量阅读,我明白了在
spriteKit
上使用计时器的最佳方式是通过SKAction
。据我所知,计时器在spriteKit中是无用的,因为它们忽略了节点和场景(如果我没记错的话,它们会忽略视图的暂停方法)。
因此,只有两种方法可以设置计时器:使用update(currentTime)
功能或使用更好、更常见的方法--SKAction
。
据我所知,SKAction更简单,也更容易实现,使用的主要功能/方法是序列
以下是如何在swift中完成:
func spawnBalls() {
let wait = SKAction.wait(forDuration: 3)
let action = SKAction.run {
//your code here
}
run(SKAction.repeatForever((SKAction.sequence([wait, action]))))
}
下面是逐行解释:
let wait = SKAction.wait(forDuration: 3)
.wait(forDuration:u)-设置包含时间的let。基本上用于设置每个动作之间的时间。时间间隔以秒为单位
let action = SKAction.run{ //code here }
.run-设置动作本身,在花括号内应该是动作代码(移动、淡入、旋转、设置动画等)。只有在告诉节点运行该操作后,才会执行该操作
run(SKAction.repeatForever((SKAction.sequence([wait, action]))))
在这一行中,我实际做的是运行操作。使用repeatForver()
表示我希望我的操作永远(定期)运行。但这一行中最有趣的部分是序列([])
——它允许将按顺序执行的一系列操作(一次一个)链接在一起,就像将我的SKAction
变量插入到一个操作数组中一样,第一个操作执行,然后第二个操作执行,依此类推。我的代码中的行表示,首先等待变量将执行(=等待3秒),然后是操作变量。因为我将其设置为repeatforever-它将重复执行(如果我删除此项,则代码将只执行一次)
通过使用SKAction,您还可以将一些操作组合在一起-.group:它的优点是您可以运行一组将同步运行的操作
苹果公司的行动文件
希望有助于那些需要它的人。你真的应该考虑通过更新FUNC使用SpRITEKIT计时功能。把它放在一边,试着设置smallBall.zPosition=1,看看是否有帮助