1

我正在尝试使用 Box2d 测试一些碰撞检测(使用此方法)。我已将源代码和标头添加到我的 XCode 项目中,并已将递归添加./**到我的标头搜索路径中。它似乎构建得很好。

不幸的是,由于我不明白的原因,我不能直接使用碰撞检测方法。

CollisionTest.h:

#import <Foundation/Foundation.h>

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

CollisionTest.mm: (正确重命名为 mm 以访问 C++ 代码)

#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 回答