Search code examples
objective-cchipmunk

Make Rounded Space in chipmunk


_space = cpSpaceNew(); // setup the world in which the simulation takes place
        _space->elasticIterations = _space->iterations;
        _space->gravity = cpv(0.0f, GRAVITY); // initial gravity vector

CGSize size = [[self view] bounds].size;
//setup the 'edges' of our world so the bouncing balls don't move offscreen
cpBody *edge = cpBodyNewStatic();
cpShape *shape = NULL;

// left
shape = cpSegmentShapeNew(edge, cpvzero, cpv(0.0f, size.height-10), 0.0f);
shape->u = 0.1f; // minimal friction on the ground
shape->e = 0.7f;
cpSpaceAddStaticShape(_space, shape);
// a body can be represented by multiple shapes

// top
shape = cpSegmentShapeNew(edge, cpvzero, cpv(size.width-10, 0.0f), 0.0f);
shape->u = 0.1f;
shape->e = 0.7f;
cpSpaceAddStaticShape(_space, shape);

// right
shape = cpSegmentShapeNew(edge, cpv(size.width-10, 0.0f), cpv(size.width-10, size.height-10), 0.0f);
shape->u = 0.1f;
shape->e = 0.7f;
cpSpaceAddStaticShape(_space, shape);

// bottom
shape = cpSegmentShapeNew(edge, cpv(0.0f, size.height-10), cpv(size.width-10, size.height-10), 0.0f);
shape->u = 0.5f;
shape->e = 0.15f;
cpSpaceAddStaticShape(_space, shape);

Using this that make Rectangle Space Around the Screen But i want to make it Rounded. Any suggestions are welcome


Solution

  • _space = cpSpaceNew(); // setup the world in which the simulation takes place
            _space->elasticIterations = _space->iterations;
            _space->gravity = cpv(0.0f, GRAVITY); // initial gravity vector
    
    // CGSize size = [[self view] bounds].size;
    //setup the 'edges' of our world so the bouncing balls don't move offscreen
    cpBody *edge = cpBodyNewStatic();
    cpShape *shape = NULL;
    
    int x1=384;
    int x2=73;
    int y1=191;
    int y2=191;
    
    
    for (int x=0 ; x<312; x++)
    {
        CGPoint Point1 = CGPointMake(x1, y1);
        CGPoint Point2 = CGPointMake(x2, y2);
    
        NSLog(@"(%i,%i) And (%i,%i) ",x1,y1,x2,y2);
    
        shape = cpSegmentShapeNew(edge, Point1, Point2, 0.0f);
        shape->u = 0.1f; // minimal friction on the ground
        shape->e = 0.7f;
        cpSpaceAddStaticShape(_space, shape);
        x1--;
        y2++;
    
        // a body can be
    }
    
    x1=384;
    x2=695;
    y1=191;
    y2=191;
    
    for (int x=0 ; x<312; x++)
    {
        CGPoint Point1 = CGPointMake(x1, y1);
        CGPoint Point2 = CGPointMake(x2, y2);
        shape = cpSegmentShapeNew(edge, Point1, Point2, 0.0f);
        shape->u = 0.1f; // minimal friction on the ground
        shape->e = 0.9f;
        cpSpaceAddStaticShape(_space, shape);
        x1++;
        y2++;
        // a body can be
    }
    x1=73;
    x2=73;
    y1=502;
    y2=813;
    
    for (int x=0 ; x<312; x++)
    {
        CGPoint Point1 = CGPointMake(x1, y1);
        CGPoint Point2 = CGPointMake(x2, y2);
        shape = cpSegmentShapeNew(edge, Point1, Point2, 0.0f);
        shape->u = 0.1f; // minimal friction on the ground
        shape->e = 0.9f;
        cpSpaceAddStaticShape(_space, shape);
        y1++;
        x2++;
        // a body can be
    }
    x1=384;
    x2=695;
    y1=813;
    y2=813;
    
    for (int x=0 ; x<312; x++)
    {
        CGPoint Point1 = CGPointMake(x1, y1);
        CGPoint Point2 = CGPointMake(x2, y2);
        shape = cpSegmentShapeNew(edge, Point1, Point2, 0.0f);
        shape->u = 0.1f; // minimal friction on the ground
        shape->e = 0.7f;
        cpSpaceAddStaticShape(_space, shape);
        x1++;
        y2--;
        // a body can be
    }
    

    i Got a Solution Using this Document i make A Rounded Space. Thank You