我想向玩家添加重力和速度,但無法修復此錯誤。我嘗試了多種不同的東西,但總是得到相同類型的錯誤。誰能告訴我在做什麼錯的,爲什麼它不能夠使用乘以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二元運算符不能應用於操作數
- 2. 二元運算符'=='不能應用於兩個'[AnyHashable:Any]!'操作數
- 3. 二元運算符| =不能應用於兩個AVAudioSessionCategoryOptions操作數
- 4. 二元運算符'|'不能應用於兩個'NSPointerFunctionsOptions'操作數
- 5. 二元運算符'/'不能應用於兩個'Double'操作數
- 6. 二元運算符'/'不能應用於兩個'UInt32'操作數
- 7. 二元運算符' - ='不能應用於類型'CGFloat'和'Int'的operends
- 8. 二元運算符'=='不能應用於類型'[MKAnnotation]'和'MKAnnotation'的操作數
- 9. 二元運算符*不能應用於Int和Double類型的操作數
- 10. 二元運算符「<=」不能應用於Bool和Int類型的操作數
- 11. 二元運算符'*'不能應用於'Float'和'Float!'類型的操作數。
- 12. 二元運算符'==='不能應用於'Any?'類型的操作數。和'UIBarButtonItem!'
- 13. 二元運算符'/'不能應用於'UIColor'和'Int'類型的操作數
- 14. 二元運算符'=='不能應用於'Expression [String]?'類型的操作數和'串?'
- 15. 二元運算符'<'不能應用於'Double?'類型的操作數。和'雙'
- 16. 二進制運算符'<'不能應用於'CGPoint'和'Int'類型的操作數使用Guard
- 17. 二元運算符'+'不能應用於兩個'NSNumber'操作數 - swift 3
- 18. 二元運算符' - '不能應用於兩個'[Float]'操作數 - Surge.framework
- 19. 二元運算符不能應用於類型「的UIImage」的操作數
- 20. 二元運算符'>'不能應用於兩個'String ?!'操作數
- 21. 二進制運算符不能應用於類型「NSError」的操作數和「NilLiteralConvertible」
- 22. 二元運算符 「&&」 不能被應用到兩個字符串操作數
- 23. 二元運算符不能應用於NSpredicate和int
- 24. 的iOS:二元運算符「| =」不能適用於兩個「布爾」操作數
- 25. 二元運算符「==」不能被應用到兩個`CGAffineTransform`操作數
- 26. Swift Error:二進制運算符'&&'不能應用於兩個'Bool'操作數
- 27. 運算符'=='不能應用於字符串類型和枚舉的操作數
- 28. Swift:二元運算符'+'不能應用於'AnyObject'類型的操作數嗎?和「INT」
- 29. Swift 2:二元運算符'=='不能應用於類型'()?'的操作數和「布爾」
- 30. 二元運算符'*'不能應用於類型'(@escaping(Double) - > Void) - >()'和'Double'的操作數?
爲什麼'somePoint * someFloat'有意義?簡而言之,物理學看來是否正確? – Larme
@Larme它給了我同樣的錯誤,當我做'someFloat * someFloat'也是,那麼實際的問題是什麼,爲什麼它是不可能的? – Yes
@是簡單的數學,你不能用桔子多個蘋果。 – Desdenova