問題タブ [skphysicscontact]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
85 参照

swift2 - Optional のラップを解除する Nil 値を見つける - 簡単に明白な理由がない

これに似たエラーが多数投稿されていることは理解していますが、これは例外的な状況だと思います。

チュートリアルの一環として、私はアプリを使って作業していますが、しばらくの間は問題なく動作しますが、理由もなく、エラーでクラッシュすることがわかりません

致命的なエラー: オプション値のラップ解除中に予期せず nil が見つかりました。問題は、アプリケーションを非常にゆっくりと実行しても、オブジェクトの接触でクラッシュするように見えることと、そうでない場合があることです (アプリにはオブジェクトが 3 つしかないため、何が起こっているかを簡単に確認できます)。それが壊れる機能は次のとおりです。

これはスニペットに過ぎないことは理解していますが、どこでエラーを探すべきかについて何か思い浮かびますか?

0 投票する
1 に答える
135 参照

ios - didBeginContact が PKPhyicsObject を渡しました

拡張するヘルパーメソッドがありますSKPhysicsContact

渡されdidBeginContact()た でこのメソッドを呼び出しますcontact

アプリをクラッシュさせる次のエラー メッセージが表示されることがあります (5 分の 1 など)。

調べたところPKPhysicsContact、プライベート フレームワークの一部です (リンク)。 SKPhysicsContactの特定のプロパティのみを公開する単なる空のクラス定義のように見えますPKPhysicsContact

これは、SpriteKit チームの Objective-C ハックであり、Swift の強力なタイピングを壊しているように感じます。

ヘルプ?

いつでも戻ってくるようにするにはどうすればよいSKPhysicsContactですか?


テストするチェックを追加しましたSKPhysicsContact

タイプの不一致を正しくキャッチします。

実際、!!?を返すことは決してありません。SKPhysicsContact


Objective-C でこれを実行しようとしましたが (レスポンダーの提案に従って)、同じ結果が得られました。

Apple Dev Forumsでディスカッションを行っており、将来の回答を求める人に役立つ可能性があります。

参照用の Objective-C コードは次のとおりです。

ここで呼び出されます:

このクラッシュを返します:


Apple のバグレポートを追加、#23332190

0 投票する
1 に答える
92 参照

ios - SKSpriteNode の最小衝突角度を設定する方法

SKSpriteNode オブジェクトの最小衝突角度を設定して、他のスプライトと衝突したときに、反転角度が常にこの角度 (負または正) 以上になるようにするにはどうすればよいですか?

私の目的は、たとえば、2 つの平行なエッジ間のデッドロック衝突を防止して、ボールがそれらの間で永遠に振動しないようにすることです。

0 投票する
1 に答える
578 参照

swift - Swift を使用した SKPhysicsContactDelegate 衝突検出

SKPhysicsContactDelegate 衝突検出で発生している問題を修正しようとしています。ノードAとノードBの2つのノードがあり、ノードAは画面上で静止していますが、ノードBはユーザーの指で画面上をドラッグできます。nodeA は、nodeB がオーバーラップしているかどうかを検出できる必要があります。didBeginContact メソッドと didEndContact メソッドが複数回呼び出されていますが、これは調査の結果、予想される動作であることがわかりました。この問題を回避するには、整数変数を 0 に設定し、連絡先があるたびに増分し、連絡先が終了するたびに減分します。値が 0 より大きい場合、2 つのノードはオーバーラップしており、値が 0 に等しい場合はオーバーラップしていません。これは、ユーザーが nodeB を nodeA にドラッグする速度が速すぎるまで問題なく動作します。これが発生すると、連絡方法が常に正しい回数呼び出されるとは限りません。たとえば、3 つの接触が検出されても、端部接触が 2 つしか検出されない (またはまったく存在しない) 場合があります。この場合、プログラムは、2 つの節点が重なり合っていなくても重なり合っていると見なします。プログラムが更新できるよりも速くユーザーがノードをドラッグしているため、これが発生していると想定しています。これを回避するためにできることはありますか? 基本的に、2 つのノードがいつ重なって、いつ重ならないかを正確に知る必要があるだけです。また、ノードが凸形状であることにも注意してください。以下は私の連絡方法です:プログラムが更新できるよりも速くユーザーがノードをドラッグしているため、これが発生していると想定しています。これを回避するためにできることはありますか? 基本的に、2 つのノードがいつ重なって、いつ重ならないかを正確に知る必要があるだけです。また、ノードが凸形状であることにも注意してください。以下は私の連絡方法です:プログラムが更新できるよりも速くユーザーがノードをドラッグしているため、これが発生していると想定しています。これを回避するためにできることはありますか? 基本的に、2 つのノードがいつ重なって、いつ重ならないかを正確に知る必要があるだけです。また、ノードが凸形状であることにも注意してください。以下は私の連絡方法です:

0 投票する
1 に答える
186 参照

ios - Swift 2 での物理接触の検出

アプリで 2 つのオブジェクト間の接触を検出したいと考えています。enumさまざまなタイプを定義する必要があります。

私も追加SKPhysicsContactDelegateしましたSKView

didMoveToView、私は持っています

だからここに私が定義した私のオブジェクトがあります

私が持っているdidBeginContact機能では:

画面をタップすると、ボール オブジェクトが画面の半分から別の場所にジャンプし、box1 と呼ばれるオブジェクトが画面の半分に「落下」し、プレイヤーがボックスに衝突せずに通過したかどうかを検出するための「見えない」ギャップがあります。画面の残り半分です。ボールがギャップに触れたかどうかを検出して、プレーヤーが得点するか、そうでない場合はボールがボックスに衝突するかを検出したい

0 投票する
1 に答える
447 参照

swift - GKComponent 内に SKPhysicsContact を配置する

現在、SKPhysicsContact を使用して、GameScene 内からスプライトの動作の変更をトリガーしています。問題は、展開ごとに、ゲームシーンがどんどん長くなってしまうことです。連絡先の管理を簡単にするために、SKPhysics を埋め込んだ GKComponent を作成した人はいますか? これはどのように機能しますか?

0 投票する
1 に答える
252 参照

ios - SpriteKit: 2 つの SKSpriteNode が衝突しないようにする方法 (Swift で)

プレーヤー、障害物、コインで構成される比較的単純なゲームを作成しています。私の目標は、障害物とプレイヤーの間だけで衝突し、プレイヤーとコインの間の接触がトリガーされるようにすることdidBeginContactです。

ここにいくつかのコードがあります:

このdidBeginContact関数は、ビューからコインを削除し、ユーザーの通貨銀行にコインを追加します。この関数は、プレーヤーがコインを叩いたときに呼び出されますが、コインが取り除かれる前に衝突が発生します。衝突はゲームプレイを非常に混乱させ、有効な解決策を見つけることができませんでした。助言がありますか?

0 投票する
2 に答える
37 参照

ios - スプライトが正しく接触しない

ボールとパドルがあります。ボールはパドルの上にあり、パドルに触れる必要がありますが、ボールはパドルに触れることはなく、パドルに到達する前に停止します。誰か助けてもらえますか?

ここに画像の説明を入力

0 投票する
1 に答える
72 参照

swift - デコード保存後に iOS SpriteKit 衝突検出が失敗する

Falling Nodes が落下して Base Number Sprite Node にヒットし、そこからゲーム ロジックが実行されるゲームがあります。新しいゲームを最初からセットアップすると、衝突検出が正確に機能します。NSCoding を使用して以前の保存からゲームを作成すると、問題が発生します。どちらの場合も (新しいゲームとセーブ ゲームからの継続)、物理ボディは同じです - 動的、同じサイズのボディ、同じ contactTestBitMask、同じカテゴリBitMask。私はこれをすべてテストしたので、それが真実であることを知っています。物理接触デリゲートも適切なオブジェクトに設定されています。しかし、セーブから継続したゲームでは連絡先が登録されず、原因がわかりません。唯一思いつくのは、

どんな助けでも大歓迎です