2017-08-10 89 views
2

我想向玩家添加重力和速度,但无法修复此错误。我尝试了多种不同的东西,但总是得到相同类型的错误。谁能告诉我在做什么错的,为什么它不能够使用乘以CGPointCGFloatCGFloat * CGFloatCGPoint *一个CGPoint二元运算符(*)不能应用于操作数CGPoint和CGFloat

enter image description here

+0

为什么'somePoint * someFloat'有意义?简而言之,物理学看来是否正确? – Larme

+0

@Larme它给了我同样的错误,当我做'someFloat * someFloat'也是,那么实际的问题是什么,为什么它是不可能的? – Yes

+0

@是简单的数学,你不能用桔子多个苹果。 – Desdenova

回答

3

这是不可能的CGL乘以浮动。第一个是一个点,第二个是一个数字。在现实生活中,您无法将您站立的坐标与数字相乘。但是,您可以做的是将自身的每个坐标轴乘以自身,并用结果创建一个新点。

我不知道你想做什么,但我会简单地改变这些行:

let gravityStep = CGPoint(x: 0, y: gravity * seconds) 
let velocityStep = CGPoint(x: velocity.x * seconds, y: velocity.y * seconds) 

这应该按预期工作。

+0

非常感谢,这很有帮助,但我现在得到的问题是,它不可能做'CGPoint + = CGPoint',这就是出现在上面图像的第38行和第42行的错误。有任何想法吗? – Yes

+0

@是的尝试运营商超载为您的需要。见另一个答案。你可以自己让你的'+'超载。 – nayem

+0

@nayem我试过这'CGPoint + = CGPoint',但我现在得到一个错误,说'member operator'+ ='必须至少有一个'MovementComponent''类型的参数任何想法如何解决这个问题?我写的代码如下:'func + =(lhs:CGPoint,rhs:CGPoint) - > CGPoint {return CGPoint(x:lhs.x + rhs.x,y:lhs.y + rhs.y) }' – Yes

3

您可以使用运算符重载来执行此操作。

func *(lhs: CGPoint, rhs: CGFloat) -> CGPoint { 
    return CGPoint(x: lhs.x * rhs, y: lhs.y * rhs) 
} 
2

声明该扩展

extension CGPoint { 
    static func * (left : CGPoint , right : CGFloat) -> CGPoint { 
     return CGPoint(x: left.x * right, y: left.y * right) 
    } 

    static func * (left : CGFloat , right : CGPoint) -> CGPoint { 
     return CGPoint(x: right.x * left, y: right.y * left) 
    } 
} 
1

假设你在iOS上的工作,建议您查看核心运动API,如UIGravityBehavior,CMAcceleration,CGVector。对不起,我知道这是不是直接回答你的问题,但可以帮助希望:)

这篇文章似乎摊开来得好: https://www.bignerdranch.com/blog/uidynamics-in-swift/

但是总的来说,如果你想实现重力直接你应该寻找在向量数学。也许可以使用一个帮手库,如https://github.com/nicklockwood/VectorMath(免责声明:我不参与这个库,这只是一个例子)

0

我注意到你正在通过“如何制作像Flappy Bird游戏”教程Ray Wenderlich,其中包含一些名为SKUtils的助手方法。当您添加Ray Wenderlich的SKUtils文件时,您可能需要确保它们已被选中“目标成员”。不应该,但我相信这取决于您将它们拖入xcode时选择的内容。这就是在这种情况下导致错误“Binary operator(*)不能应用于操作数CGPoint和CGFloat”的错误。这里的其他答案将帮助你理解问题,并学会自己压扁这个bug,但我假设你只是想修复这个问题,所以你可以继续这个教程。在代码和文件被借用的许多其他情况下也是如此。

+1

这是张贴在正确的问题? –

+0

在这个问题中,我们的朋友正在阅读Ray Wenderlich的“如何制作像Flappy Bird这样的游戏”教程。我有完全相同的问题,因此能够提供解决方案。 –

相关问题