2011-12-23 9 views
0

私はゲームに多くのスプライトを持っていますが、それらはすべてb2worldのボディを持っています。私のスプライトの体が小さすぎる、と彼は動いているのでタッチを検出したときにcocos2dのtestPoint領域を拡張します。

currentPosition = [[CCDirector sharedDirector] convertToGL: currentPosition];  
    b2Vec2 locationWorld = b2Vec2(currentPosition.x/PTM_RATIO, currentPosition.y/PTM_RATIO); 

    for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) 
    { 
     b2Fixture *bf1 = b->GetFixtureList(); 
     if (bf1->TestPoint(locationWorld)) 
     { 
      CCSprite *tempSprite = (CCSprite *) b->GetUserData(); 
      if (tempSprite.tag==2 ) 
      { 

今、移動しながら、それに触れることは非常に困難であるので、私は変更する必要がありますし、タッチを検出するために、私は次の操作を行いますこのコードは、このスプライトの周囲にのワイドエリアも検出します。 テストポイントを+ - さらに50ピクセルに拡張するにはどうすればいいですか?

ありがとうございます。

答えて

0

本体に大きな固定具を取り付け、固定具のセンサーフラグをtrueに設定することができます。センサフィクスチャは物理的なものを変更しませんが、ポイントが境界内にあるかどうかを確認できます。

あなたは(SensorTest.hから)このようなセンサー器具を作成することができます。

b2CircleShape shape; 
shape.m_radius = 5.0f; 
shape.m_p.Set(0.0f, 10.0f); 

b2FixtureDef fd; 
fd.shape = &shape; 
fd.isSensor = true; 
body->CreateFixture(&fd); 

はBOX2Dマニュアル、セクション6.3(PDF)を参照してください、とSensorTest.hはテストベッドに含まれています。

+0

ありがとう、しかし、彼らはそこに4行だけを書く、それは面白そうだ、あなたは私にそれの簡単な例を与えることができますか?私のやり方は良くない? – Curnelious

+0

私の編集を見て、付属のBox2Dサンプルからコードサンプルを追加しました。彼らは学習のための素晴らしいリソースです。 – kasrak

+0

ありがとう。 – Curnelious

関連する問題