views:

83

answers:

2

[SOLVED]

I copy the chipmunk folder structure from cocos2d+chipmunk template and build OK.

  • Classes/Chipmunk/include/src for 'src' folder
  • Classes/Chipmunk/chipmunk for 'include' folder

Thanks to Beta for trying to help.

:::::

I download chipmunk 5.3.1 and try with a simple example but I receive this compiled errors:

Undefined symbols:
  "_cpSpaceStep", referenced from:
      -[ChipmunkTestViewController delta:] in ChipmunkTestViewController.o
  "_cpBodyNew", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
  "_cpSpaceAddShape", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
  "_cpSpaceAddBody", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
  "_cpSpaceHashEach", referenced from:
      -[ChipmunkTestViewController delta:] in ChipmunkTestViewController.o
  "_cpInitChipmunk", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
  "_cpCircleShapeNew", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
  "_cpSpaceNew", referenced from:
      -[ChipmunkTestViewController configurarChipmunk] in ChipmunkTestViewController.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

I'm not sure about adding Chipmunk libraries correctly, what sources from chipmunk .tgz I have to include?

Here's the code:

ChipmunkTestViewController.h

#import <UIKit/UIKit.h>
#import "chipmunk.h"


@interface ChipmunkTestViewController : UIViewController {
    UIImageView *barra;
    UIImageView *esfera;

    cpSpace *space;
}

- (void) configurarChipmunk;
- (void) delta:(NSTimer *)timer;
void updateShape(void *ptr, void *unused);

@end

ChipmunkTestViewController.m

#import "ChipmunkTestViewController.h"

@implementation ChipmunkTestViewController


- (void) configurarChipmunk {
    cpInitChipmunk(); // Init Chipmunk engine

    space = cpSpaceNew(); // Create new Space
    space->gravity = cpv(0, -100); // Direcction and magnitude of gravity in Space

    [NSTimer scheduledTimerWithTimeInterval:1.0f/60.0f target:self selector:@selector(delta:) userInfo:nil repeats:YES];    // NSTimer for animations

    // Create esfera Body
    cpBody *esferaBody = cpBodyNew(50.0f, INFINITY); 
    esferaBody->p = cpv(160,250);
    // Create esfera Shape
    cpShape *esferaShape = cpCircleShapeNew(esferaBody, 15.0f, cpvzero);
    esferaShape->e = 0.5f; // Elasticity
    esferaShape->u = 0.8f; // Friction
    esferaShape->data = esfera; // UIImageView association
    esferaShape->collision_type = 1;

    cpSpaceAddBody(space, esferaBody);
    cpSpaceAddShape(space, esferaShape);

}

- (void) delta:(NSTimer *)timer {
    cpSpaceStep(space, 1.0f/60.0f);     // Refresh Space info
    cpSpaceHashEach(space->activeShapes, &updateShape, nil);     // Refresh Shapes info
}

void updateShape(void *ptr, void *unused) {
    cpShape *shape = (cpShape*)ptr;
    if (shape == nil || shape->body == nil || shape->data == nil) {
        NSLog(@"Invalid Shape...");
        return;
    }
    // Refresh Shape position
    if ([(UIView*)shape->data isKindOfClass:[UIView class]]) {
        [(UIView*)shape->data setCenter:CGPointMake(shape->body->p.x, 480 - shape->body->p.y)];
    } else {
        NSLog(@"Shape updated outside updateShape function...");
    }

}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    barra = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"barra.png"]];
    barra.center = CGPointMake(160, 350);
    esfera = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"esfera.png"]];
    esfera.center = CGPointMake(160, 230);

    [self.view addSubview:barra];
    [self.view addSubview:esfera];

    [self.view setBackgroundColor:[UIColor whiteColor]];

    [self configurarChipmunk];
}

...

@end
+3  A: 

You should use the iphonestatic.command script in the macosx/ directory to build a static library and copy the headers for you like the README says. Then all you have to do is drop that folder into your project.

If you are just copying the sources into your project you are almost certainly missing several very important optimization flags. Don't do it!

slembcke
A: 

I copy the chipmunk folder structure from cocos2d+chipmunk template and build OK.

* Classes/Chipmunk/include/src for 'src' folder
* Classes/Chipmunk/chipmunk for 'include' folder
rubdottocom