def resize_active_hash(self, dim=100.0, count=1000): """The spatial hashes used by Chipmunk's collision detection are fairly size sensitive. dim is the size of the hash cells. Setting dim to the average objects size is likely to give the best performance. count is the suggested minimum number of cells in the hash table. Bigger is better, but only to a point. Setting count to ~10x the number of objects in the hash is probably a good starting point.""" cp.cpSpaceResizeActiveHash(self._space, dim, count)
def get_initial_state(self): # return first state self.space = space = cp.cpSpaceNew() space.contents.gravity = vec2d(0.0, -900.0) space.contents.damping = 0.01 cp.cpSpaceResizeStaticHash(space, 50.0, 200) cp.cpSpaceResizeActiveHash(space, 50.0, 10) self.ball = ball = Ball(space, 5, 10, pos=(310, 180)) self.floor = Wall(space, (-60000,40), (60000,40)) self.base = base = Box(space, 5, 50, 20, (300,100)) cp.cpResetShapeIdCounter() joint = cp.cpPinJointNew( ball.body, base.body, vec2d(0,0), vec2d(0,0) ) self.save_angle() cp.cpSpaceAddJoint(space, joint) if self.rl.episodes%100==0: self.save() return self.get_state()
return shape, sprite if __name__ == "__main__": pygame.init() pygame.display.set_mode((800, 600), pygame.OPENGL | pygame.DOUBLEBUF) rabbyt.set_viewport((800, 600)) rabbyt.set_default_attribs() ### Physics stuff cp.cpInitChipmunk() space = cp.cpSpaceNew() space.contents.gravity = vec2d(0.0, -900.0) cp.cpSpaceResizeStaticHash(space, 50.0, 2000) cp.cpSpaceResizeActiveHash(space, 50.0, 100) wallBody = cp.cpBodyNew(1e100, 1e100) wallShape = cp.cpSegmentShapeNew(wallBody, vec2d(-300, -300), vec2d(300, -300), 0.0) wallShape.contents.u = 1.0 wallShape.contents.collision_type = COLLTYPE_DEFAULT cp.cpSpaceAddStaticShape(space, wallShape) shapes = [] sprites = [] for x in range(-200, 200, 15): for y in range(-200, 400, 15): shape, sprite = create_cube(space, xy=(x + random.random() * 10, y))
return shape, sprite if __name__ == "__main__": pygame.init() pygame.display.set_mode((800,600), pygame.OPENGL | pygame.DOUBLEBUF) rabbyt.set_viewport((800, 600)) rabbyt.set_default_attribs() ### Physics stuff cp.cpInitChipmunk() space = cp.cpSpaceNew() space.contents.gravity = vec2d(0.0, -900.0) cp.cpSpaceResizeStaticHash(space, 50.0, 2000) cp.cpSpaceResizeActiveHash(space, 50.0, 100) wallBody = cp.cpBodyNew(1e100, 1e100) wallShape = cp.cpSegmentShapeNew(wallBody, vec2d(-300, -300), vec2d(300, -300), 0.0) wallShape.contents.u = 1.0 wallShape.contents.collision_type = COLLTYPE_DEFAULT cp.cpSpaceAddStaticShape(space, wallShape) shapes = [] sprites = [] for x in range(-200, 200, 15): for y in range(-200, 400, 15): shape, sprite = create_cube(space, xy = (x+random.random()*10,y))