我想向玩家添加重力和速度,但无法修复此错误。我尝试了多种不同的东西,但总是得到相同类型的错误。谁能告诉我在做什么错的,为什么它不能够使用乘以CGPoint
和CGFloat
或CGFloat
* CGFloat
或CGPoint
*一个CGPoint
?二元运算符(*)不能应用于操作数CGPoint和CGFloat
回答
这是不可能的CGL乘以浮动。第一个是一个点,第二个是一个数字。在现实生活中,您无法将您站立的坐标与数字相乘。但是,您可以做的是将自身的每个坐标轴乘以自身,并用结果创建一个新点。
我不知道你想做什么,但我会简单地改变这些行:
let gravityStep = CGPoint(x: 0, y: gravity * seconds)
let velocityStep = CGPoint(x: velocity.x * seconds, y: velocity.y * seconds)
这应该按预期工作。
非常感谢,这很有帮助,但我现在得到的问题是,它不可能做'CGPoint + = CGPoint',这就是出现在上面图像的第38行和第42行的错误。有任何想法吗? – Yes
@是的尝试运营商超载为您的需要。见另一个答案。你可以自己让你的'+'超载。 – nayem
@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
您可以使用运算符重载来执行此操作。
func *(lhs: CGPoint, rhs: CGFloat) -> CGPoint {
return CGPoint(x: lhs.x * rhs, y: lhs.y * rhs)
}
声明该扩展
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)
}
}
假设你在iOS上的工作,建议您查看核心运动API,如UIGravityBehavior,CMAcceleration,CGVector。对不起,我知道这是不是直接回答你的问题,但可以帮助希望:)
这篇文章似乎摊开来得好: https://www.bignerdranch.com/blog/uidynamics-in-swift/
但是总的来说,如果你想实现重力直接你应该寻找在向量数学。也许可以使用一个帮手库,如https://github.com/nicklockwood/VectorMath(免责声明:我不参与这个库,这只是一个例子)
我注意到你正在通过“如何制作像Flappy Bird游戏”教程Ray Wenderlich,其中包含一些名为SKUtils的助手方法。当您添加Ray Wenderlich的SKUtils文件时,您可能需要确保它们已被选中“目标成员”。不应该,但我相信这取决于您将它们拖入xcode时选择的内容。这就是在这种情况下导致错误“Binary operator(*)不能应用于操作数CGPoint和CGFloat”的错误。这里的其他答案将帮助你理解问题,并学会自己压扁这个bug,但我假设你只是想修复这个问题,所以你可以继续这个教程。在代码和文件被借用的许多其他情况下也是如此。
这是张贴在正确的问题? –
在这个问题中,我们的朋友正在阅读Ray Wenderlich的“如何制作像Flappy Bird这样的游戏”教程。我有完全相同的问题,因此能够提供解决方案。 –
- 1. Swift二元运算符'+'不能应用于两个CGFloat操作数
- 2. 二元运算符'/'不能应用于两个'Double'操作数
- 3. 二元运算符'=='不能应用于两个'[AnyHashable:Any]!'操作数
- 4. 二元运算符不能应用于两个'NSWindowStyleMask'操作数
- 5. 二元运算符| =不能应用于两个AVAudioSessionCategoryOptions操作数
- 6. 二元运算符'&&'不能应用于两个Bool操作数
- 7. 二元运算符不能应用于操作数
- 8. 二元运算符'/'不能应用于两个'UInt32'操作数
- 9. 二元运算符'|'不能应用于两个'NSPointerFunctionsOptions'操作数
- 10. swift二元运算符不能应用于操作数
- 11. 二元运算符' - ='不能应用于类型'CGFloat'和'Int'的operends
- 12. 二元运算符“<=”不能应用于Bool和Int类型的操作数
- 13. 二元运算符'*'不能应用于'Float'和'Float!'类型的操作数。
- 14. Swift二元运算符'+ ='不能应用于'AnyObject!'类型的操作数。和'串!'
- 15. 二元运算符'==='不能应用于'Any?'类型的操作数。和'UIBarButtonItem!'
- 16. 二元运算符'<'不能应用于'Double?'类型的操作数。和'双'
- 17. 二元运算符'=='不能应用于类型'[MKAnnotation]'和'MKAnnotation'的操作数
- 18. 二元运算符'/'不能应用于'UIColor'和'Int'类型的操作数
- 19. 二元运算符*不能应用于Int和Double类型的操作数
- 20. 二元运算符'=='不能应用于'Expression [String]?'类型的操作数和'串?'
- 21. 二元运算符'==='不能应用于两个“字符串”操作数
- 22. 二进制运算符'<'不能应用于'CGPoint'和'Int'类型的操作数使用Guard
- 23. 二进制运算符'<'不能应用于'Double'和'CGFloat'类型的操作数
- 24. 二元运算符'+'不能应用于两个'int2'操作数。需要使用“&+”
- 25. 二元运算符' - '不能应用于两个'[Float]'操作数 - Surge.framework
- 26. 错误:二元运算符'+ ='不能应用于两个'[Int:String]'操作数
- 27. 二元运算符'>'不能应用于两个'String ?!'操作数
- 28. 二元运算符不能应用于类型“的UIImage”的操作数
- 29. 二元运算符'+'不能应用于两个'NSNumber'操作数 - swift 3
- 30. Swift错误:二元运算符'>'不能应用于两个T操作数
为什么'somePoint * someFloat'有意义?简而言之,物理学看来是否正确? – Larme
@Larme它给了我同样的错误,当我做'someFloat * someFloat'也是,那么实际的问题是什么,为什么它是不可能的? – Yes
@是简单的数学,你不能用桔子多个苹果。 – Desdenova