Я работаю над базовой игрой, но я не уверен, где я хочу ее взять. Так что пока я работаю только над базовой механикой.
Проблема, с которой я столкнулся, заключается в том, что мне нужно, чтобы вражеские спрайты двигались к спрайту игрока. Я уже разобрался с базовой векторизацией, но поскольку спрайты движутся по вектору, они также замедляются по мере приближения к своей цели.
Вот отрывок моего кода.
#Enemy Mechanics
for enemy in enemy_list:
pygame.draw.rect(screen, green, (enemy.rect.x, enemy.rect.y-5, enemy.Health/4, 3), 0)
pygame.draw.rect(screen, green, (enemy.rect.x, enemy.rect.y-5, 25, 3), 1)
ppos = pPlayer.rect.x, pPlayer.rect.y
epos = enemy.rect.x, enemy.rect.y
etarget = epos[1] - ppos[1], epos[0] - ppos[0]
enemy.rect.x -= etarget[1]/20 #This is the problem
enemy.rect.y -= etarget[0]/20
#Bullet Mechanics
for bullet in bullet_list:
mpos = pygame.mouse.get_pos()
bpos = bullet.rect.x, bullet.rect.y
target = bpos[1] - mpos[1], bpos[0] - mpos[0]
dist = math.sqrt(((bpos[0] - mpos[0])**2) + ((bpos[1] - mpos[1])**2))
bullet.rect.x -= target[1]/20
bullet.rect.y -= target[0]/20
if dist < 30:
bExplode(bullet.rect.x, bullet.rect.y)
blist.remove(bullet)
bullet.kill()
enemy_hit_list = (pygame.sprite.spritecollide(bullet, enemy_list, False))
for enemy in enemy_hit_list:
enemy.Health -= 25
print(enemy.Health)
if enemy.Health <= 0:
enemy_list.remove(enemy)
all_sprites_list.remove(enemy)
bullet_list.remove(bullet)
all_sprites_list.remove(bullet)
blist.remove(bullet)
Как видите, я разделил векторы на 20, потому что это замедляет их до разумной скорости, но они также останавливаются, не достигнув своей цели. Мне нужна помощь, чтобы спрайты двигались к игроку с постоянной заданной скоростью.