二进制运算符(*)不能应用于操作数CGPoint和CGFloat

时间:2017-08-10 10:21:07

标签: swift xcode sprite-kit cgpoint cgfloat

我正在尝试向玩家添加重力和速度,但无法解决此错误。我尝试了多种不同的东西,但总是得到相同类型的错误。任何人都可以告诉我我做错了什么以及为什么不可能使用 CGPoint CGFloatCGFloat * {{1 } CGFloat * a CGPoint

enter image description here

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

根本不可能将CGPoint与Float相乘。第一个是一个点,第二个是数字。在现实生活中,您不能将您站立的坐标乘以数字。但是,您可以做的是将坐标的每个轴相乘,并为结果创建一个新点。

我不确定你要做什么,但我只是将这些行改为:

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

这应该按预期工作。

答案 2 :(得分: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)
    }
}

答案 3 :(得分:1)

假设您正在iOS上工作,建议您查看Core Motion apis,如UIGravityBehavior,CMAcceleration,CGVector。对不起我知道这不是直接回答你的问题,但希望有所帮助:)

这篇文章似乎很好地说明了这一点: https://www.bignerdranch.com/blog/uidynamics-in-swift/

一般来说,如果你想直接实现引力,你应该看矢量数学。也许使用帮助库,如https://github.com/nicklockwood/VectorMath(免责声明:我没有参与此库,它只是一个例子)

答案 4 :(得分:0)

我注意到你正在经历"如何制作像Flappy Bird这样的游戏" Ray Wenderlich的教程,其中包含一些名为SKUtils的文件中的辅助方法。当您添加Ray Wenderlich的SKUtils文件时,您可能必须确保他们已经签入了#34;目标会员资格"。不应该,但我相信这取决于你将它们拖入xcode时所选择的内容。这就是造成错误的原因"二进制运算符(*)不能应用于操作数CGPoint和CGFloat"在这种情况下。这里的其他答案将帮助您理解问题,并学会自己压缩bug,但我假设您只是想解决问题,因此您可以继续本教程。同样适用于借用代码和文件的许多其他情况。