【问题标题】:How do I increase gravity over time, or when score is updated?如何随着时间的推移或分数更新时增加重力?
【发布时间】:2019-06-12 18:16:04
【问题描述】:

我有一个从屏幕顶部掉下来的物体。我让它正常工作,但截至目前,我希望物体开始下降得更慢,然后随着时间的推移或分数的增加而下降得更快。哪一个最容易。

这是我的物体重力代码

private func setupPhysics() {
    physicsWorld.gravity = CGVector(dx: 0.0, dy: -5.8)
    physicsWorld.contactDelegate = self

这是我的分数更新标签代码。

private func updateScoreLabel() {
    scoreLabel.text = String(score)

现在,该物体以 -5.8 的速度下降,这很好,我可能会让它开始慢一点,但我想让它逐渐增加它的下降速度。

【问题讨论】:

  • 您已经知道如何设置重力,并且您已经知道分数何时更新,您可以在不需要任何人的情况下完成自己的问题。应用你所知道的,你会做得很好。
  • 我认为这是公平的说法.. 但如果我知道如何回答我自己的问题,我就不会在这里发帖了..
  • 当然可以,很多人都很懒惰,想要答案而不是弄清楚。就像我说的,你知道如何设置重力,你知道分数什么时候更新。您的问题改写为“更新分数时如何设置重力?”

标签: swift xcode sprite-kit


【解决方案1】:

为重力添加一个观察者的属性,以在每次变化时改变世界的重力:

var gravity = CGVector(dx: 0.0, dy: -5.8) {
                 didSet {
                         physicsWorld.gravity = gravity
                        }
                 }
var gravityScaleFactor : CGFloat = 0.9     // Gravity changes this much when score is updated

将您的设置更改为:

private func setupPhysics() {
    physicsWorld.gravity = gravity
    physicsWorld.contactDelegate = self

(这里可能不需要设置物理世界的重力,因为重力初始化时可能由观察者为重力属性设置)。

当你改变分数时调整重力:

private func updateScoreLabel() {
    scoreLabel.text = String(score) 
    gravity.dx *= gravityScaleFactor

由于重力比例因子是一个变量,您可以根据难度级别、功率提升等更改它,并且当我们通过重力属性上的属性观察器更改世界的重力时,我们可以在任何地方更改属性并且知道世界的引力也会随之改变。

【讨论】:

  • 感谢您的代码,这只是我如何修复错误的更新,我将“gravity.dx *=gravityScaleFactor”更改为“gravity.dx = CGFloat(gravityScaleFactor)”
  • 对不起 Colin - 我将编辑答案以将 GravityScaleFactor 初始化为 CGFloat。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 2013-08-30
  • 1970-01-01
  • 2021-02-16
  • 2011-03-07
  • 2013-08-10
  • 1970-01-01
相关资源
最近更新 更多