Как получить доступ к b2CollideCircles Box2d в Objective-C? - PullRequest
1 голос
/ 14 июля 2011

Я пытаюсь проверить обнаружение столкновений с 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>, но ошибка остается той же.

Как получить прямой доступ к методам коллизий?

1 Ответ

1 голос
/ 14 июля 2011

Сообщение об ошибке состояло в том, что компилятору не удалось найти метод, который соответствовал используемой мной сигнатуре - передаваемые мною переменные не соответствовали типам объявленных параметров метода, а поскольку 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);
...