使用SKTUtils乘以CGPoints

时间:2015-01-21 20:18:10

标签: swift sktutils

我正在使用Swift开发一个Sprite Kit游戏,松散地遵循找到herehere的Ray Wenderlich教程,并合并SKTUtils module以允许轻松添加/乘法/ CGPoint s。的划分等。

我发现的问题是,所有在线文档都是指模块的较旧的Objective-C版本,而Github上的代码已被重写为使用Swift,并且没有随附使用指南。

本教程(使用Objective-C编写)指出以下代码应该有效:

- (void)update:(NSTimeInterval)delta {
  CGPoint gravity = CGPointMake(0.0, -450.0);
  CGPoint gravityStep = CGPointMultiplyScalar(gravity, delta);
  self.velocity = CGPointAdd(self.velocity, gravityStep);
  CGPoint velocityStep = CGPointMultiplyScalar(self.velocity, delta);
  self.position = CGPointAdd(self.position, velocityStep);
}

松散地翻译成Swift,等同于:

func update(delta:NSTimeInterval) {
    let gravity:CGPoint = CGPointMake(0.0, -450.0);
    var gravityStep:CGPoint = CGPointMultiplyScalar(gravity * delta)
    self.velocity = self.velocity + gravityStep;
    let velocityStep:CGPoint = CGPointMultiplyScalar(self.velocity, delta)
    self.position = self.position + velocityStep;
}

但是,CGPointMultiplyScalar功能已更改为*。我没有找到关于如何实施这些文档的随附文档,我的方法也不起作用:

func update(delta:NSTimeInterval) {
    ...
    var gravityStep:CGPoint = CGPoint(gravity * delta); // nope
    var gravityStep:CGPoint = gravity * delta; // nope
    ...
}

有没有人有这方面的经验,可以告诉我哪里出错了?

1 个答案:

答案 0 :(得分:2)

CGPoint扩展程序如下:

public func * (point: CGPoint, scalar: CGFloat) -> CGPoint {
    return CGPoint(x: point.x * scalar, y: point.y * scalar)
}

标量参数需要一个CGFloat,但是你试图将它与NSTimeInterval相乘,并且由于没有隐式转换,你必须这样做

var gravityStep:CGPoint = gravity * CGFloat(delta)

让它发挥作用。