使用 SKPhysicsBody linearDamping Swift 4 提高节点速度
Increase Node Speed with SKPhysicsBody linearDamping Swift 4
我从我的 GameScene
调用了以下 class
func update(_ currentTime: TimeInterval)
因为它在那里被调用,所以我的 class 每秒都被调用,这让我想到了这个。我目前有我的 self.physicsBody?.linearDamping = 0.6 但我如何增加这个数字以便我也可以提高速度?我打算使用另一个计时器,直到我意识到我的 SKSpriteNode class 每秒都被调用。不太确定如何解决这个问题,有什么想法吗?我基本上想每 2.0 秒减少一次该数字,而不让更新功能妨碍。
任何时候你想在 sprite-Kit 游戏中以固定的时间间隔做某事,你可以按如下方式实现:
首先声明 2 个属性(在你的 class 但在所有函数定义之外)
var timeOfLastThing: CFTimeInterval = 0.0
var timePerThing: CFTimeInterval = 2.0 // How often to do the thing
(如果你想每 2 秒做的事情是生成一个怪物,那么你可以调用这些 timeOfLastMonsterSpawn
和 timePerMonsterSpawn
,但这取决于你)
然后,在Update
中检查是否超过了timePerThing
。如果是这样,请调用您的 doThing
函数来执行您需要的操作,然后重置自上次调用以来的时间:
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
if (currentTime - timeOfLastThing > timePerThing) {
doThing()
self.timeOfLastThing = currentTime
}
}
func doThing() {
// Your spawn code here
}
使 doThing
成为一个单独的函数(相对于它在 update()
中的行)的好处是您可以从 didMoveToView
或任何其他地方调用它在正常的时间控制周期之外生成对象。
您可以根据需要更改 timePerThing
的值以控制事情发生的速度。
您也可以考虑创建一个 SKAction
以指定的时间间隔运行 doThing
,但我认为要更改生成对象的速率,您必须删除并重新- 创建 SKAction,你可以在 setter for timePerThing
.
中执行此操作
你真的不应该在 SpriteKit 中使用 NSTimer,因为 SpriteKit 引擎不知道定时器在做什么并且无法控制它(一个例子是定时器保持 运行 并做一些事情即使您将场景设置为暂停)。
我从我的 GameScene
调用了以下 classfunc update(_ currentTime: TimeInterval)
因为它在那里被调用,所以我的 class 每秒都被调用,这让我想到了这个。我目前有我的 self.physicsBody?.linearDamping = 0.6 但我如何增加这个数字以便我也可以提高速度?我打算使用另一个计时器,直到我意识到我的 SKSpriteNode class 每秒都被调用。不太确定如何解决这个问题,有什么想法吗?我基本上想每 2.0 秒减少一次该数字,而不让更新功能妨碍。
任何时候你想在 sprite-Kit 游戏中以固定的时间间隔做某事,你可以按如下方式实现:
首先声明 2 个属性(在你的 class 但在所有函数定义之外)
var timeOfLastThing: CFTimeInterval = 0.0
var timePerThing: CFTimeInterval = 2.0 // How often to do the thing
(如果你想每 2 秒做的事情是生成一个怪物,那么你可以调用这些 timeOfLastMonsterSpawn
和 timePerMonsterSpawn
,但这取决于你)
然后,在Update
中检查是否超过了timePerThing
。如果是这样,请调用您的 doThing
函数来执行您需要的操作,然后重置自上次调用以来的时间:
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
if (currentTime - timeOfLastThing > timePerThing) {
doThing()
self.timeOfLastThing = currentTime
}
}
func doThing() {
// Your spawn code here
}
使 doThing
成为一个单独的函数(相对于它在 update()
中的行)的好处是您可以从 didMoveToView
或任何其他地方调用它在正常的时间控制周期之外生成对象。
您可以根据需要更改 timePerThing
的值以控制事情发生的速度。
您也可以考虑创建一个 SKAction
以指定的时间间隔运行 doThing
,但我认为要更改生成对象的速率,您必须删除并重新- 创建 SKAction,你可以在 setter for timePerThing
.
你真的不应该在 SpriteKit 中使用 NSTimer,因为 SpriteKit 引擎不知道定时器在做什么并且无法控制它(一个例子是定时器保持 运行 并做一些事情即使您将场景设置为暂停)。