Для загрузки кода следуйте link:Создание спрайтов отскакивают друг от друга
фон:
Так я шел через Pygame учебники, так как я новичок в этом, и я нашел Известный Эли Бендерски tutorial. Я проходил первую часть и пытался добавить к нему свой собственный талант, сделав его «Социальные кошки». Кошки бродят вокруг, и если они коснутся друг друга, они будут пастись друг с другом и идти своими разными путями. Другими словами, то же самое, что и у Эли, но с обнаружением столкновений и новыми спрайтами. Я полагаю, что это будет хорошей практикой. Я провел последние несколько дней, исследуя обнаружение столкновений и то, как это делают разные люди, но я еще не видел тот, который будет работать с моим сценарием или чем-то подобным. Я начинаю видеть, как небольшой общины я в
Цель:.
В конечном счете, я пытаюсь сделать так, когда кошка бежит в другой, тот, который столкнулся воли уйти в случайном направлении, равном 45 градусам меньше или больше, чем его текущее направление.
Проблема:
Я импортирования vec2d и у меня есть класс Cat и мой главный. Я хотел бы сделать обнаружение столкновений в основном, потому что позже я создам класс GameManager, который следит за тем, что происходит. Согласно ООП, кошки не должны знать друг о друге в любом случае. У меня возникли проблемы с обнаружением столкновения. Я пробовал пару разных способов. В обоих случаях ничего не происходит, когда они касаются друг друга. У меня создается впечатление, что я хочу сделать, это сложнее, чем то, как я это воспринимаю. Как я это завязываю? Мне кажется, что я потратил достаточно времени на этот аспект. Конечно, это процесс обучения. Мысли?
Способ 1:
mainWindow.fill(_white_)
for cat in cats:
cat.update(timePassed)
cat.blitme()
catsCollided = pg.sprite.spritecollide(cat, catGroup, True)
print pg.sprite.spritecollide(cat, catGroup, False)
for cat in catsCollided:
cat.currentDirection.angle = randint(int(cat.currentDirection.angle - 45), int(cat.currentDirection.angle + 45))
Способ 2:
mainWindow.fill(_white_)
for cat in cats:
cat.update(timePassed)
cat.blitme()
print pg.sprite.spritecollide(cat, catGroup, False)
tempCatList = list(cats)
for catA in cats:
tempCatList.remove(catA)
for catB in cats:
if catA.rect.colliderect(catB.rect):
cats[cats.index(catA)].currentDirection.angle = randint(int(cat.currentDirection.angle - 45), int(cat.currentDirection.angle + 45))
Вы можете использовать 'Цвет (белый), если' _white_' является константой. Я думаю, проблема в том, что вы изменяете список тем. Вместо этого выполните 'для catA в котах [:]:' и измените 'catA' – ninMonkey
Но почему это происходит, когда быстрее набирать« _white_' »? А как насчет первого пути? – Sighter
Но если я это сделаю, мне придется снова проверить catA на столкновение, потратив время процессора. – Sighter