Я создаю простой 2D-шутер после онлайн-урока, и вражеские спрайты (кроме 1, всего их 5) не соблюдают мой код столкновения.Все работает, кроме объекта пули, которым игрок управляет, просто проходит сквозь вражеские спрайты.Сообщения об ошибках, которые я получил:
Traceback (most recent call last):
File "C:\Python\Python36\pygame projects\space invaders.py", line 163, in <module>
bullet.hideturtle()
File "C:\Python\Python36\lib\turtle.py", line 2322, in hideturtle
self.pen(shown=False)
File "C:\Python\Python36\lib\turtle.py", line 2459, in pen
self._update()
File "C:\Python\Python36\lib\turtle.py", line 2660, in _update
self._update_data()
File "C:\Python\Python36\lib\turtle.py", line 2646, in _update_data
self.screen._incrementudc()
File "C:\Python\Python36\lib\turtle.py", line 1292, in _incrementudc
raise Terminator
turtle.Terminator
Если вы просматриваете код наполовину, вы найдете теорию Пифагора, которую я использовал для математики столкновений, неуверенную, верна она или нет:
enemies = []
number_of_enemies = 5
for i in range(number_of_enemies):
enemies.append(turtle.Turtle())
for enemy in enemies:
enemy.color("green")
enemy.shape("circle")
enemy.penup()
enemy.speed(0)
x = random.randint(-200, 200)
y = random.randint(100, 250)
enemy.setposition(x, y)
enemyspeed = 2
def isCollision(t1, t2):
distance = math.sqrt(math.pow(t1.xcor() - t2.xcor(), 2)+ math.pow(t1.ycor() - t2.ycor(), 2))
if distance < 15:
return True
else:
return False
while True:
for enemy in enemies:
x = enemy.xcor()
x += enemyspeed
enemy.setx(x)
if enemy.xcor() > 280:
for e in enemies:
y = enemy.ycor()
y -= 40
enemy.sety(y)
enemyspeed *= -1
if enemy.xcor() < -280:
for e in enemies:
y = enemy.ycor()
y -= 40
enemy.sety(y)
enemyspeed *= -1
if bulletstate == "fire":
y = bullet.ycor()
y += bulletspeed
bullet.sety(y)
if isCollision(bullet, enemy):
#reset the bullet
bullet.hideturtle()
bulletstate = "ready"
bullet.setposition(0, -400)
#reset the enemy
x = random.randint(-200, 200)
y = random.randint(100, 250)
enemy.setposition(x, y)
if isCollision(player, enemy):
player.hideturtle()
enemy.hideturtle()
print ("Get To The Doctors! You're Riddled!")
break
Извинения, если ответ очевиден.Я был бы благодарен за время, которое кто-то тратит, объясняя ошибкуДругие опубликовали похожие вопросы, но у каждого есть примеры, которые относятся к ним, и я все еще нахожусь на этапе, когда мне сложно представить примеры других.Любая помощь будет принята с благодарностью.