rubychipmunklibgosu

Space borders in Chipmunk with Ruby


I am trying to make the edges of my window collidable, rather than having my shape drop through the floor on creation.

When I was looking through the demos on the site, I saw this line of code that was ment to define the bounds of the space:

[_space addBounds:CGRectMake(130, 139, 767, 1500) thickness:20 elasticity:1.0 friction:1.0 layers:PhysicsEdgeLayers group:CP_NO_GROUP collisionType:nil];

I think that this assigns collidable borders around the space, thus enclosing it.

Due to some minor knowledge in Objective-C, I know that addBounds is a method for space that allows to create the space border.

However, when looking through the ruby bindings for chipmunk, I was not able to find the AddBounds method.

Furthermore, in a related problem, I could not find the cpShapeSetFriction ruby equivilant.

Were can I find these methods, and If I can't, are there any alternatives?


Solution

  • For those who are wondering, There are no ruby bindings for the addBounds method.

    I got around this by creating four static segment shapes that made up the borders of my window.

    Here are the segments you need to create the bounds.

        CP::Shape::Segment.new(YOUR_STATIC_BODY, CP::Vec2.new(0, 0), CP::Vec2.new(WIDTH, 0), 1.0)
        CP::Shape::Segment.new(YOUR_STATIC_BODY, CP::Vec2.new(0, 0), CP::Vec2.new(0, HEIGHT), 1.0)
        CP::Shape::Segment.new(YOUR_STATIC_BODY, CP::Vec2.new(WIDTH, 0), CP::Vec2.new(WIDTH, HEIGHT), 1.0)
        CP::Shape::Segment.new(YOUR_STATIC_BODY, CP::Vec2.new(0, HEIGHT), CP::Vec2.new(WIDTH, HEIGHT), 1.0)
    

    Don't forget to add them to the space with @space.add_static_shape(THE_SEGMENT)

    Shape friction in ruby can be set with: shape.u = 0.1 #Shape friciton of 0.1