如何在 Objective-C 中访问 Box2d 的 b2CollideCircles?
How to gain access to Box2d's b2CollideCircles in Objective-C?
我正在尝试用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);
相关文章:
- Box2D World.GetBodyList() 返回 NULL,但 World 显然正在更新对象
- 使用 vcpkg 安装 box2d
- 如何在Cmake中正确查找头路径,以便在我的项目中构建Box2D
- Box2D Contact Listener碰撞仅间歇性工作
- Box2D OpenGl Error
- Box2D 断言失败:kNormal > 1.19209289550781250000e-7F
- Box2D (C++) 三角形故障区域断言
- Box2D 如何处理位置和坐标?
- Box2D ContactListener未检测到碰撞
- SFML 和 Box2D SetUserData 无法将参数从 const char [4] 转换为 void *
- Box2D不寻常的错误.为什么 0阻止错误
- 为什么还要使用运动型身体?Box2D
- Box2D-从身体中获取固定装置的宽度,或者我什至应该尝试
- Box2D,联系听众:切勿调用BeginContact
- box2d -c 中删除主体
- 链接到由Emscripten编译的Box2D链接时的未定义符号
- 焊接体的Box2d中心质量
- 销毁 Box2D 主体 - 读取访问冲突错误
- 在Codelite IDE中使用Box2D
- Box2D-我应该多久在窗户循环中使用台阶