重力と速度をプレーヤーに追加しようとしていますが、このエラーを修正することはできません。私は複数の異なることを試みましたが、常に同じタイプのエラーが発生します。誰もが私が間違っているのと、なぜそのことはできませんCGPoint
とCGFloat
またはCGFloat
* CGFloat
またはCGPoint
* CGPoint
を掛ける使用するかを教えてもらえますか?オペランドCGPointとCGFloatにバイナリ演算子(*)を適用できません
答えて
CGPointにFloatを掛けることはできません。最初のものはポイントで、2番目のものは数字です。実際の生活では、立っている座標に数字を掛けることはできません。しかし、あなたができることは、座標の各軸をそれ自身に掛けて、結果を使って新しい点を作ることです。
は、私はあなたが何をしようとしてわからないんだけど、私は単純にこれらの行を変更したい:予想通り
let gravityStep = CGPoint(x: 0, y: gravity * seconds)
let velocityStep = CGPoint(x: velocity.x * seconds, y: velocity.y * seconds)
これは動作するはずです。
ありがとう、非常に有用ですが、私が今得られる問題は、CGPoint + = CGPointを行うことができないことです。上の画像の38行目と42行目に現れるエラーです。何か案は? – Yes
@Yesオペレータが必要以上に負荷をかけてください。他の答えを見てください。自分で '+'オーバーロードすることができます。 – nayem
@nayem 'CGPoint + = CGPoint'でこれを試しましたが、'メンバー演算子 '+ ='は少なくとも1つの引数 '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)
}
あなたは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)
}
}
この拡張を宣言し、UIGravityBehavior、CMAcceleration、CGVectorなどのコアモーションのAPIを見てお勧めします。 https://www.bignerdranch.com/blog/uidynamics-in-swift/
一般的にあなたが直接重力を実装する場合、あなたが探している必要がありますけれども:私はこれが直接あなたの質問に答えるのではなく、助け:)
をこの記事では、それをうまくレイアウトするらしいの希望を知って申し訳ありませんベクトル数学で。そしておそらくhttps://github.com/nicklockwood/VectorMathのようなヘルパーライブラリを使用しています(免責:私はこのライブラリには関与していません)。
「Flappy Birdのようなゲームを作る方法」のチュートリアルRay Wenderlichには、SKUtilsというファイルにいくつかのヘルパーメソッドが含まれています。 Ray WenderlichからSKUtilsファイルを追加するときに、 "Target Membership"にチェックインされているかどうかを確認する必要があります。必要はありませんが、xcodeにドラッグしたときに選択した内容に依存していると思います。これが、この場合、「オペランドCGPointとCGFloatにはバイナリ演算子(*)を適用できません」というエラーを引き起こします。他の答えは、あなたが問題を理解するのに役立ちます、自分でバグをスクワッシュすることを学ぶが、私はあなたがチュートリアルを続けることができるように問題を修正したいと仮定しています。同じことが、コードやファイルが借用されている他の多くのケースにも当てはまります。
これは正しい質問の下に掲載されていますか? –
この質問では、私たちの友人は、レイWenderlichから "Flappy Birdのようなゲームを作る方法"のチュートリアルを見ています。私はまったく同じ問題を抱えていたため、解決策を提供することができました。 –
- 1. タイプ 'CGPoint'と 'Int'のオペランドには、バイナリ演算子 '<'を適用できません。
- 2. '()'と 'Bool'型のオペランドにはバイナリ演算子 '=='を適用できません
- 3. バイナリ演算子 '==='は、 'Any?'型のオペランドには適用できません。と 'UIBarButtonItem!'
- 4. 2つの '[[String]]'オペランドにバイナリ演算子 '!='を適用できません
- 5. 2つの '[AnyHashable:Any]!'にバイナリ演算子 '=='を適用できません。オペランド
- 6. バイナリ演算子| = 2つのAVAudioSessionCategoryOptionsオペランドに適用できません
- 7. オペランドにスウィッチバイナリ演算子を適用できません
- 8. 'Int'と 'CGFloat'型のオペランドに2進演算子 '.. <'を適用できません
- 9. Swift 3.0バイナリ演算子 '=='を適用できません
- 10. 'double'と 'string'型のオペランドに数値演算子を適用できません
- 11. エラーメッセージ:演算子 'string'と 'メソッドグループ'のオペランドに演算子 '+'を適用できません
- 12. 演算子 "&&"は、 'int'型と 'int'型のオペランドには適用できません
- 13. 演算子 'op'は 'ダイナミック'と 'ラムダ式'のオペランドには適用できません
- 14. 演算子&&はdouble型とbool型のオペランドには適用できません
- 15. 演算子 '&&'は 'bool'型と 'int'型のオペランドには適用できません
- 16. Swift 3のUICollectionViewLayoutAttributes型のオペランドに、バイナリ演算子 '+ ='を適用することはできません。
- 17. Swift - バイナリ演算子を2つの "Double"オペランドに適用することはできません
- 18. バイナリ演算子を2つの 'NSWindowStyleMask'オペランドに適用することはできません
- 19. バイナリ演算子 '>'を2つの 'String ?!'に適用することはできません。オペランド
- 20. swift3.0で連結:バイナリ演算子 '+'は、 '[]'型と '[]'型のオペランドには適用できません。
- 21. スウィフト3 - バイナリ演算子「==」は2つの「体mystruct」のオペランドに適用することはできません
- 22. バイナリ演算子 '&&'は、bool型と文字列型のオペランドには適用できません。
- 23. バイナリ演算子 '> ='は 'String.IndexDistance?'型のオペランドには適用できません。 (別名「オプション<Int>」)と 'int型
- 24. iOS:2つの 'Bool'オペランドに2進演算子 '| ='を適用できません
- 25. 2つの 'T'オペランドに2進演算子 '/'を適用できません
- 26. 2つの 'Double'オペランドに2進演算子 '/'を適用できません
- 27. Swift: 'AnyObject?'型のオペランドには、バイナリ演算子 '+'を適用できません。そして、 'int型
- 28. タイプ '(@エスケープ(ダブル) - >ボイド) - >()'および 'ダブル'のオペランドには、バイナリ演算子 '*'を適用できませんか?
- 29. "パターンマッチ"演算子〜=原因 "Swiftのバイナリ演算子〜= 'はオペランドにできません"エラー
- 30. Swift単項演算子 '!' 'OLVideoCell'タイプのオペランドには適用できません
'somePoint * someFloat'は意味があるのはなぜですか?単に物理学の面では正しいのでしょうか? – Larme
@Larmeその 'someFloat * someFloat'を実行しても同じエラーが出るので、実際の問題は何ですか、なぜそれはできないのですか? – Yes
@イエス簡単な数学では、オレンジを使ってリンゴを複数作ることはできません。 – Desdenova