我正在使用Swift开发一个Sprite Kit游戏,松散地遵循找到here和here的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
...
}
有没有人有这方面的经验,可以告诉我哪里出错了?
答案 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)
让它发挥作用。