I have 2 objects in a list and the collision is supposed to start an action but it only works with the first object in the list.
In the imgur link, the first video is the feature that I'm making where when you collide with one of the power up tiles, time slows and you get a choice between speed, an extra jump, and something else I haven't decided yet. But you can see it only activates with the one on the right which is the first object in the list, which I am assuming is an issue with me using a for loop but I'm not sure. This is all of the stuff in the event:
for i in p_up_rects:
pygame.Rect.move_ip(i, - scroll[0], - scroll[1])
DISPLAYSURF.blit(p_up_sprite, i)
if moves.square.colliderect(i):
p_up_coll = True
time_slow += (time_slow_target - time_slow) / 50
if abs(time_slow_target - time_slow)*100 <= 5:
time_slow = .005
if time_slow <= .005:
#math
if p_up_scale_timer < 60:
p_up_outline_r += (p_up_outline_r_target - p_up_outline_r) / 50
p_up_outline_r = min(p_up_outline_r, p_up_outline_r_target)
left_up_off[0] += (left_up_off_target[0] - left_up_off[0]) / 100
left_up_off[1] += (left_up_off_target[1] - left_up_off[1]) / 100
mid_up_off[1] += (mid_up_off_target - mid_up_off[1]) / 100
right_up_off[0] += (right_up_off_target[0] - right_up_off[0]) / 100
right_up_off[1] += (right_up_off_target[1] - right_up_off[1]) / 100
left_up_off[0] = max(left_up_off[0], -100)
left_up_off[1] = max(left_up_off[1], -50)
mid_up_off[1] = max(mid_up_off[1], -100)
right_up_off[0] = min(right_up_off[0], 100)
right_up_off[1] = max(right_up_off[1], -50)
#scaling things
if made_choice == True:
p_up_scale_timer += (61 - p_up_scale_timer) / 100
if p_up_chosen['left'] == True:
if p_up_scale_timer < 60: # adjusting the scales
p_up_scale_off_right[0] += (.5 - p_up_scale_off_right[0]) / 100
p_up_scale_off_right[1] += (.5 - p_up_scale_off_right[1]) / 100
p_up_scale_off_mid[0] += (.5 - p_up_scale_off_mid[0]) / 100
p_up_scale_off_mid[1] += (.5 - p_up_scale_off_mid[1]) / 100
p_up_scale_off_left[0] += (60 - p_up_scale_off_left[0]) / 100
p_up_scale_off_left[1] += (60 - p_up_scale_off_left[1]) / 100
elif p_up_scale_timer >= 60:
left_up_off[0] += (0 - left_up_off[0]) / 50
left_up_off[1] += (0 - left_up_off[1]) / 50
p_up_scale_off_left[0] += (25 - p_up_scale_off_left[0]) / 50
p_up_scale_off_left[1] += (25 - p_up_scale_off_left[1]) / 50
elif p_up_chosen['mid'] == True:
if p_up_scale_timer < 60: # adjusting the scales
p_up_scale_off_right[0] += (.5 - p_up_scale_off_right[0]) / 100
p_up_scale_off_right[1] += (.5 - p_up_scale_off_right[1]) / 100
p_up_scale_off_left[0] += (.5 - p_up_scale_off_left[0]) / 100
p_up_scale_off_left[1] += (.5 - p_up_scale_off_left[1]) / 100
p_up_scale_off_mid[0] += (60 - p_up_scale_off_mid[0]) / 100
p_up_scale_off_mid[1] += (60 - p_up_scale_off_mid[1]) / 100
elif p_up_scale_timer >= 60:
mid_up_off[1] += (0 - mid_up_off[1]) / 50
p_up_scale_off_mid[0] += (25 - p_up_scale_off_mid[0]) / 50
p_up_scale_off_mid[1] += (25 - p_up_scale_off_mid[1]) / 50
elif p_up_chosen['right'] == True:
if p_up_scale_timer < 60: # adjusting the scales
p_up_scale_off_left[0] += (.5 - p_up_scale_off_left[0]) / 100
p_up_scale_off_left[1] += (.5 - p_up_scale_off_left[1]) / 100
p_up_scale_off_mid[0] += (.5 - p_up_scale_off_mid[0]) / 100
p_up_scale_off_mid[1] += (.5 - p_up_scale_off_mid[1]) / 100
p_up_scale_off_right[0] += (60 - p_up_scale_off_right[0]) / 100
p_up_scale_off_right[1] += (60 - p_up_scale_off_right[1]) / 100
elif p_up_scale_timer >= 60:
right_up_off[0] += (0 - right_up_off[0]) / 50
right_up_off[1] += (0 - right_up_off[1]) / 50
p_up_scale_off_right[0] += (25 - p_up_scale_off_right[0]) / 50
p_up_scale_off_right[1] += (25 - p_up_scale_off_right[1]) / 50
if p_up_scale_timer >= 60:
p_up_outline_r += (0 - p_up_outline_r) / 100
if p_up_outline_r <= 20:
p_up_rects.remove(i)
if p_up_outline_r <= 10:
p_up_coll = False
source https://stackoverflow.com/questions/74587273/having-issues-with-collisions-i-think-the-problem-is-for-loops
Comments
Post a Comment