Проблема здесь:
start_x = round(enemyshoots1.x+enemyshoots1.width-107)
start_y = round(enemyshoots1.y + enemyshoots1.height-50)
target_x = playerman.x+playerman.width//2
target_y = playerman.y+playerman.width//2
dir_x, dir_y = target_x - start_x, target_y - start_y
Если вы напечатаете dir_x
и dir_y
, вы увидите, что значения очень высокие. Вы, вероятно, добавляете эти значения каждый кадр к позиции маркера. Вот почему они покидают экран до того, как вы действительно их увидите.
Вы можете попробовать это:
BULLET_SPEED = 5
delta_x, delta_y = target_x - start_x, target_y - start_y
distance = math.sqrt(delta_x ** 2 + delta_y ** 2)
dir_x = BULLET_SPEED * delta_x / distance
dir_y = BULLET_SPEED * delta_y / distance
Учтите, что это решение не округляет значения, и pygame может вызвать исключение, потому что координат со значениями с плавающей запятой. Вы должны округлить координаты, прежде чем использовать их для рисования.