如何在 Objective-C 中访问 Box2d 的 b2CollideCircles?

How to gain access to Box2d's b2CollideCircles in Objective-C?

本文关键字:Box2d b2CollideCircles 访问 Objective-C      更新时间:2023-10-16

我正在尝试用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>,但错误仍然是一样的。

如何直接访问碰撞方法?

错误消息是编译器找不到适合我使用的签名的方法——我传递的变量不适合声明的方法参数的类型,而且由于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);