2017-08-10 98 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這樣的遊戲」教程。我有完全相同的問題,因此能夠提供解決方案。 –

相關問題