問題タブ [skphysicsbody]

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 投票する
2 に答える
792 参照

ios - SpriteKit Physics: 異なる z 平面上にある場合は無視します

SpriteKit では、互いに衝突する 2 つのノードを持つことができますが、別のノードが導入されると、物理的な動作がどのように変化しますか?

たとえば、次の 3 つのノードがあるとします。
- Object
- Object_Hole
- Player

したがって、プレーヤー (オレンジ色の円) とオブジェクト (青い四角形) を含むシーン:

ここに画像の説明を入力

上記のシーンでは、プレーヤー (円) が重力の影響を受け、オブジェクト (正方形) と衝突します。物理ボディ、カテゴリ、衝突ビットマスクを使用して、これがどのように機能するかを知っています。

ここで、Object_Hole (緑の四角) を紹介します。

ここに画像の説明を入力

上のシーンでは、Object_Hole (緑の四角形) がオブジェクト (青の四角形) の上に重なっています。これは、同じ z 平面またはより高い平面上にあります。

Object_Hole がある領域で、Player (円) のphysicsBody がオブジェクトと衝突しないようにすることはできますか?

オーバーレイ ノードを追加するよりもこれを達成するためのより良い方法がある場合は、お知らせください。そうでなければ、それは可能ですか?

ありがとう!

0 投票する
7 に答える
7237 参照

ios - Physicsbody がノードのアンカー ポイントに付着しない

私のシーンには、長方形と同じサイズの物理ボディを持つ長方形がたくさんあります。すべてのオブジェクトを CGPointZero に固定するのが好きですが、そうすると、物理ボディが真ん中に固定されたままになることに気付きました。つまり、私の物理体の位置は、視覚的表現の 100 ピクセル下の左にあります。

コードの簡単なスニペットを次に示します。

この問題を解決するためのアイデアやアドバイスをいただければ幸いです。たとえば、物理体を視覚化できれば役立つかもしれませんが、方法がわかりません。

更新:アンカーポイントを設定せず、長方形を再配置するだけで問題を解決しました。したがって、問題はまだ存在しますが、回避策があり、回避策はうまく機能しています。

0 投票する
5 に答える
2716 参照

objective-c - SKPhysicsBodybodyWithPolygonFromPath メモリ リーク

カスタム シェイプを使用してスプライト キットの物理ボディを作成すると、奇妙なメモリ リークが発生します。これは私の実装がどのように見えるかです:

すべてがSKSpriteNodeメソッド内で行われています。そのようなボディを作成した後、Instruments はいくつかのメモリ リークについて教えてくれます。

CGPathRelease(path);行が必要です-それがないと、理解できるメモリリークが増えますCGPath。代わりにこの実装を使用している場合 (テスト目的):

...すべてが正常に機能しており、メモリ リークは発生していません。これは Sprite Kit のバグなのか、何か間違っているのだろうか。

0 投票する
3 に答える
738 参照

sprite-kit - SKPhysicsBody が大きすぎます

私はSKSpriteNode飛行機を持っています。これが画像です(300px x 83px):

飛行機

イメージの名前はp40@2x.png、私の Xcode プロジェクトと同じです。

今、私は飛行機に物理ボディを追加しています:

CGPathSKPhysicsBody Path Generatorによって生成されます

飛行機の物理ボディをデバッグするために、物理ボディSKShapeNodeと同じものを追加しましたCGPath

結果は次のとおりです。

結果

私は何か間違ったことをしていますか?

PS:興味深いことに気づきました。次のように指定CGPathした場合:

形が飛行機にフィット!

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

ios - カスタムphysicsBodyの重力の影響を受けないSKSpriteNode

SKSpriteNode のphysicsBody のカスタム エッジ パスを作成しています。

次のコードを使用してphysicsBodyを割り当てようとしました:

これらのどれも、スプライトが重力の影響を受けることを可能にしません。

ただし、単純なものを使用するとbodyWithCircleOfRadius:、スプライトは重力の影響を受けます。

なぜこれが起こるのか、誰かが光を当てることができますか?

0 投票する
3 に答える
4868 参照

ios - スプライト キットでの衝突検出

Sprite Kit で衝突検出を使用しています。それは機能しており、スプライトがパスを横断するのを妨げています。ただし、didBeginContact: で通知を受け取っていません。また、衝突が発生したときに物理エンジンがどのように応答するかを制御できないようです。

SKAction followPath:asOffset:orientToPath:duration を使用して、さまざまな車 (SKSpriteNodes) が次のパスを移動しています。

以前は、2 台の車が道を横切った場合、一方が他方を追い越し、両方とも通常通り続行していました。衝突検出を実装するために、次の変更を加えました...

これを @interface に追加しました:

これを @implementation に追加しました:

これを私のinitメソッドに追加しました:

青い車を作成します。

また、赤い車も作成します。

他の車もありますが、何が問題なのかがわかるまで、この2台を使用しています. 任意の 2 台の車が衝突した場合に通知を受け取りたいです。そのため、carCategory という 1 つのカテゴリだけを使用しています。

最初の問題は、通知が届かないことです。私はこれを持っていますが、コンソールに何も記録しません:

2 つ目の問題は、2 台の車が道を横切ると、お互いにコースから外れてしまうことです。これは問題ありませんが、衝突の処理方法を管理できないようです。奇妙なことは、車の作成方法の両方に対してこれを行っても何も変わらないことです。

衝突検出は、両方の車でコメントアウトされた 3 行でも同じように機能します。これは私には正しくないようです。衝突検出は、次の行もコメントアウトした場合にのみ停止します。

だから私の主な質問は: contactTest が何も報告しないのはなぜですか? 2 つ目の質問は、categoryBitMask、collisionBitMask、または contactTestBitMask をどの車にも割り当てていないのに、衝突検出が行われるのはなぜですか?

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

ios - SKPhysicsBody と SKShapeNode を揃えるには?

SKShapeNode( )を作成する次のコードがありますself.tiles

しかし、作成された物理ボディは、画面上で作成された形状と一致していないようです.SKShapeNodeは、画面上で(視覚的に)正確に必要な場所です。

物理体が実際にどこにあるのかわかりません。

SKShapeNodeとを揃えるにはどうすればよいSKPhysicsBodyですか?

0 投票する
0 に答える
758 参照

ios - スプライト キットの物理アサーションに失敗しました: (typeA == b2_dynamicBody || typeB == b2_dynamicBody)

物理演算を含む SpriteKit を使用して、IOS 7 の機能を完全に備えたゲームを作ろうとしています。そのため、ユーザーが画面にタブで移動すると、他のボール (動いていないのでdynamic=NOこれらのターゲット ボールに設定) を介してボールを投げます。私がやりたいことは次のとおりです。

  • すぐにボールを止めます(私はresting=YESこれに使用しています)
  • categoryBitMask と contactTestBit マスクを投球からターゲット ボールのカテゴリ / contactBitMask に切り替える
  • このボールのダイナミクスを停止します。

dynamic=NO内部で設定している場合(またはdidBeginContactのような他の関数であっても)、次のエラーが発生する場合、1つのことを除いてすべて問題ありません。updatedidSimulatePhysics

アサーションに失敗しました: (typeA == b2_dynamicBody || typeB == b2_dynamicBody)、関数 SolveTOI、ファイル /SourceCache/PhysicsKit_Sim/PhysicsKit-4.6/PhysicsKit/Box2D/Dynamics/b2World.cpp、670 行目。

物理に関してはまだ計算が続いているので理由はわかりましたが、どうにかしてこれを設定しなければなりません。

では、衝突/接触後にプログラムでダイナミクスを停止するにはどうすればよいですか?

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

ios7 - bodyWithEdgeLoopF​​romRect アサーションに失敗しました

iOS7 スプライト キット プロジェクトで物理ワールドを設定しようとすると、次のエラーが表示されます。

奇妙なことに、プロジェクトに新しいシーンを追加する前に、使用しているコードが機能していました。プロジェクトが正しく実行されていた最後の既知の時点にプロジェクトを戻しましたが、まだ機能しません。物理ワールドを削除すると、プロジェクトがビルドされます。

実行しようとするとプログラムが終了します…</p>

このコードを新しいプロジェクトに入れると、問題なく動作します。私のプロジェクトで何が起こっているのか、それを修正する方法について何か考えはありますか?