2017-08-10 5 views
2

重力と速度をプレーヤーに追加しようとしていますが、このエラーを修正することはできません。私は複数の異なることを試みましたが、常に同じタイプのエラーが発生します。誰もが私が間違っているのと、なぜそのことはできませんCGPointCGFloatまたはCGFloat * CGFloatまたはCGPoint * CGPointを掛ける使用するかを教えてもらえますか?オペランドCGPointとCGFloatにバイナリ演算子(*)を適用できません

enter image description here

+0

'somePoint * someFloat'は意味があるのはなぜですか?単に物理学の面では正しいのでしょうか? – Larme

+0

@Larmeその 'someFloat * someFloat'を実行しても同じエラーが出るので、実際の問題は何ですか、なぜそれはできないのですか? – Yes

+0

@イエス簡単な数学では、オレンジを使ってリンゴを複数作ることはできません。 – Desdenova

答えて

3

CGPointにFloatを掛けることはできません。最初のものはポイントで、2番目のものは数字です。実際の生活では、立っている座標に数字を掛けることはできません。しかし、あなたができることは、座標の各軸をそれ自身に掛けて、結果を使って新しい点を作ることです。

は、私はあなたが何をしようとしてわからないんだけど、私は単純にこれらの行を変更したい:予想通り

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

@Yesオペレータが必要以上に負荷をかけてください。他の答えを見てください。自分で '+'オーバーロードすることができます。 – nayem

+0

@nayem 'CGPoint + = CGPoint'でこれを試しましたが、'メンバー演算子 '+ ='は少なくとも1つの引数 '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

あなたはiOSの上で作業していると仮定すると、

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

この拡張を宣言し、UIGravityBehavior、CMAcceleration、CGVectorなどのコアモーションのAPIを見てお勧めします。 https://www.bignerdranch.com/blog/uidynamics-in-swift/

一般的にあなたが直接重力を実装する場合、あなたが探している必要がありますけれども:私はこれが直接あなたの質問に答えるのではなく、助け:)

をこの記事では、それをうまくレイアウトするらしいの希望を知って申し訳ありませんベクトル数学で。そしておそらくhttps://github.com/nicklockwood/VectorMathのようなヘルパーライブラリを使用しています(免責:私はこのライブラリには関与していません)。

0

「Flappy Birdのようなゲームを作る方法」のチュートリアルRay Wenderlichには、SKUtilsというファイルにいくつかのヘルパーメソッドが含まれています。 Ray WenderlichからSKUtilsファイルを追加するときに、 "Target Membership"にチェックインされているかどうかを確認する必要があります。必要はありませんが、xcodeにドラッグしたときに選択した内容に依存していると思います。これが、この場合、「オペランドCGPointとCGFloatにはバイナリ演算子(*)を適用できません」というエラーを引き起こします。他の答えは、あなたが問題を理解するのに役立ちます、自分でバグをスクワッシュすることを学ぶが、私はあなたがチュートリアルを続けることができるように問題を修正したいと仮定しています。同じことが、コードやファイルが借用されている他の多くのケースにも当てはまります。

+1

これは正しい質問の下に掲載されていますか? –

+0

この質問では、私たちの友人は、レイWenderlichから "Flappy Birdのようなゲームを作る方法"のチュートリアルを見ています。私はまったく同じ問題を抱えていたため、解決策を提供することができました。 –

関連する問題