I have a ball generator that “generates” and adds balls (circles) to the simulation.
The ball must be removed when it hits the static poly in the s_boxes list.
This is done by the collision handler ball_wall_collision .
Mistake:
The next popup does what it says, it pops up

My code is:
Ball Generator
class BallGenerator: def __init__(self, min_y, max_y, x): self.min = min_y self.max = max_y self.x = x self.counter = 0 def bowl(self, balls): global ball_bowled y = random.randint(self.min, self.max) pos = to_pymunk((self.x,y)) r = 10 m = 15 i = pm.moment_for_circle(m, 0, r) b = pm.Body(m,i) b.position = pos f_x = random.randint(-600000,-400000) b.apply_force( (f_x,0.0),(0,0) ) ball = pm.Circle(b, r) ball.elasticity = 0.75 ball.friction = 0.95 balls.append(ball) space.add(ball,b) print 'bowled' ball_bowled += 1 def handle(self, balls): if self.counter == FPS: self.bowl(balls) self.counter = 0 self.counter += 1
Collision handler
def ball_wall_collision(space, arb, balls, s_boxes): shapes = arb.shapes boxes = [box[0] for box in s_boxes] # Get walls ball = None wall = None for ba in balls: if ba in shapes: ball = ba break for box in boxes: if box in shapes: wall = box break if wall and ball: print 'removing' space.remove(ball, ball.body) # Where the runtime problem happens balls.remove(ball) print 'removed' return False else: return True space.add_collision_handler(0,0,begin=ball_wall_collision, balls=balls,s_boxes=s_boxes) # Other args to function
What am I doing wrong in collision handling?
- Am I missing something in a call to
space.remove ? - Does the function I need work? Or a mistake elsewhere (which I don’t think so) ...
python pygame pymunk
pradyunsg Mar 07 '13 at 10:23 2013-03-07 10:23
source share