1

Box2d との衝突検出をテストしようとしています (このメソッドを使用)。ソースとヘッダーを XCode プロジェクトに追加./**し、ヘッダー検索パスに再帰を追加しました。それはうまく構築されているように見えます。

残念ながら、理由がわかりませんが、衝突検出方法を直接使用することはできません。

CollisionTest.h:

#import <Foundation/Foundation.h>

@interface CollisionTest : NSObject
-(void)test;
@end

CollisionTest.mm: (C++ コードにアクセスするために適切に名前を mm に変更)

#import "CollisionTest.h"
#import "Box2D.h"

@implementation CollisionTest

-(void)test {
  b2CircleShape *circle1 = new b2CircleShape();
  circle1->m_radius = 5.0;
  b2Vec2 circle1Pos(0.0, 0.0);
  b2Transform *transform1 = new b2Transform();
  transform1->Set(circle1Pos, 0.0);
  ... ditto for circle2 ...

  b2Manifold *manifold = new b2Manifold();
  b2CollideCircles(&manifold, circle1, transform1, circle2, transform2);
  if (manifold->pointCount > 0){
    NSLog(@"collided");
  } else {
    NSLog(@"no collision");
  }
}

@end

円のセットアップ コードは正常に実行されますが、コンパイラはb2CollideCircles「'b2CollideCircles' の呼び出しに一致する関数がありません」という行で失敗します。

Box2d.hはデフォルトでは含まれていないようですb2Collision.hので、実装ファイルと の両方に追加しようとしまし#import "b2Collision.h"#import <Box2d/Collision/b2Collision.h>が、エラーは同じままです。

衝突メソッドに直接アクセスするにはどうすればよいですか?

4

1 に答える 1

1

エラー メッセージは、使用している署名に適合するメソッドをコンパイラが見つけられなかったというものでした。渡した変数は、宣言されたメソッド パラメータの型に適合しませんでした。また、C++ ではメソッドのオーバーロードが許可されているため、同じものとして登録されませんでした。方法。

変数を適切に定義し (C++ は Objective-C ではありません)、メソッド シグネチャを注意深く読むと、正常に動作するコードが生成されます。

b2CircleShape circle1;
circle1.m_radius = 5.0;
b2Vec2 circle1Pos(10.01, 0.0);
b2Transform transform1;
transform1.Set(circle1Pos, 0.0);
...
b2Manifold manifold;
b2CollideCircles(&manifold, &circle1, transform1, &circle2, transform2);
于 2011-07-14T01:37:04.987 に答える