2016-11-28 4 views
0
SKSpriteNode * test = [[SKSpriteNode alloc] initWithColor:[UIColor redColor] size:CGSizeMake(100, 100)]; 
[self addChild:test]; 
[test setPosition:CGPointMake(300, 300)]; 

// bottom 
CGSize textureSize = CGSizeMake(100, 100); 
SKPhysicsBody *physicsBottom = [SKPhysicsBody bodyWithRectangleOfSize:textureSize]; 
physicsBottom.categoryBitMask = ColliderBottom; 
physicsBottom.contactTestBitMask = ColliderBottom | ColliderObstacle; 

// working... 
// test.physicsBody = physicsBottom; 

// not working... this line is problem. 
test.physicsBody = [SKPhysicsBody bodyWithBodies:@[physicsBottom]]; 

didEndContactはこのコードでは機能しません。iosスプライトキット本体本体が作動しない

test.physicsBody = [SKPhysicsBody bodyWithBodies:@[physicsBottom]]; 

何が問題ですか?

typedef enum { 
ColliderObstacle = 1 << 0, 
ColliderCharacter = 1 << 2, 
ColliderLeft  = 1 << 3, 
ColliderRight  = 1 << 4, 
ColliderBottom  = 1 << 5,}ColliderType; 

//こんにちは、この行為はわかりません。 didEndContactイベントが動作しない理由???????

+0

は(physicsBottomノードがあり、私はそれが別のノードであると思います)シンプルに自分のコードを変更 – Whirlwind

+0

。 –

答えて

1

私のプロジェクトでphysicsBodyを設定しようとしましたが、問題を再現できませんでした。 しかし、自分と私の間のコードを比較すると、あなたの問題は1つのphysicsBodyを作成し、作成するすべての "collider"に設定することです。これはコピーの問題に関連しています。 おそらくこれは、copy方法追加することによって固定することができます。

renderComponent.node.physicsBody = [SKPhysicsBody bodyWithBodies:@[[physicsComponentBottom.physicsBody copy] 
                    ]]; 

を私はそれが唯一のvolume-based physicsBody.Thisはあなたの問題かもしれませんサポートしていること、documentation後で読み、法の制限を見つけます。

スプライトキットは、2種類の物理ボディ、ボリュームベースボディ、エッジベースボディをサポートします。フィジックスボディを作成すると、その種類、サイズ、およびシェイプは、呼び出すコンストラクタメソッドによって決まります。エッジベースのボディには質量や体積はなく、システム内の力やインパルスの影響を受けません。エッジベースのボディは、物理シミュレーションで音量の低い境界や空洞を表現するために使用されます。対照的に、ボリュームベースのボディは、質量と体積を持つオブジェクトを表すために使用されます。私はあなたがphysicsComponentBottom.physicsBodyの作成方法をどこでも見カント

+0

私のために働いていません.. ^_^^ –

+0

ドキュメントをお読みですか?私は参照を送信する4u –

+0

働いて!あなたのおかげでありがとう。私は再び読んで、私はそれを見つけた。私はself.physicsBody.density = 1;が足りません。私は価値を設定する方法を勉強します。もう一度親切な男ありがとう。 –