Я невероятно застрял, я использую Python и Pygame для создания игрового проекта. (экран 770 x 485) Он включает перемещение круга влево или вправо по 5 вертикальным дорожкам, когда выпадающие случайно сгенерированные прямоугольники. У меня есть класс Wall для генерации их случайным образом, но я не знаю, как обнаружить столкновение между EACH экземпляром прямоугольника и моего круга.Python, Pygame List Conundrum
Прямо в бит с z и списком c, где я пытаюсь заставить их сталкиваться, но он сталкивается только с первым прямоугольником и не обнаруживает никаких других падающих прямоугольников (которые генерируются после периода 100 тики между собой) Может ли кто-нибудь указать мне в правильном направлении? Я действительно не уверен в переменной z, c списке и переменной v: \
Заранее спасибо!
class Wall:
def __init__(self,colour,x,y,life):
self.colour = colour
self.x = x
self.y = y
self.life = life
def drop(self):
pygame.draw.rect(screen, self.colour, (self.x, self.y, 154, 30))
self.y += 1.25
self.life -= 1
if self.life < 0:
wall.remove(self)
def playMode(): #assume everything is indented properly
global wall, points
check = True
left = False
right = False
circlex = 385
degrees = 0
health = 3
wall = []
x = 2
points = 0
n = 0
c = []
starttime = time.time()
while True:
runningtime = time.clock()
screen.fill((255,255,255))
x -= 1
if x == 1:
wall.append(Wall((random.randint(1,255),random.randint(1,255),random.randint(1,255)),
random.choice([0, 154, 308, 462, 616]), -30 , 450))
x = 100
for i in wall:
i.drop()
z = wall[-1]
c.append(z)
v = c[(n)]
if 445 >= v.y >= 340 and v.x == (circlex - 77):
health -= 1
points -= 5
v.y = 485 #moves this instance offscreen so it doesn't make the hp go to 0 immediately
n += 1
print v.y
circle = pygame.draw.circle(screen, colour,(circlex, 409), 50)
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
showPauseScreen()
elif event.key == K_p:
showPauseScreen()
elif event.key == K_LEFT:
if circlex > 77:
circlex = circlex - 154
elif event.key == K_RIGHT:
if circlex < 616:
circlex = circlex + 154
elif event.type == QUIT:
terminate()
if health == 0:
check = False
return #goes to gameover screen basically
pygame.display.update()
clock.tick(100)
Пожалуйста, форматировать код в соответствии с конвенциями вещий, прежде чем мы можем вам помочь. – 2013-04-29 07:20:04
, мы не можем вам помочь, если вы не отступали правильно, с первого взгляда, но вы проверяете столкновение на одном объекте на одном объекте - z [-1]. –
Pygame построил в обнаружении столкновения (для прямоугольников). Взгляните на этот вопрос, чтобы понять, как его использовать: http://stackoverflow.com/questions/16227616/how-to-use-sprite-collide-in-pygame –