Когда игрок находится в зоне действия определенного врага, он может размахивать своим мечом и наносить урон тому врагу, который находится перед ним. У меня есть этот код здесь, который демонстрирует систему, которую я имею на месте сейчас:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1: #Event called when left click
for enemy in enemies: #An array that holds instances of enemies
if (math.sqrt( ( (enemy.x - x) **2) + ( (enemy.y - y)**2) ) < (100+reachBonus) ): #Using distance forumla to calculate player x and y values in corresondance to an enemies x and y position
enemy.health -= woodenSword.damageAmount #subtracts the enemies health by the amount of damage that the woodenSword does
Проблема с этой системой заключается в том, что я проверяю, находится ли игрок в пределах определенного диапазона, поэтому технически он будет работать в круговом диапазоне вокруг противника. Это сработало бы для чего-то вроде взрыва, но так как я работаю над боевой системой, а игрок должен смотреть прямо на врага, это не сработает.
Как возможный подход я считаю raytracing. Я привык к Unreal Engine, где вы можете посылать трассировку строки, которая по сути является невидимой строкой, которая будет возвращать True, если она что-то ударила напрямую. Это было бы вариантом, если бы я бросил несколько лучей перед игроком и увидел, сталкивается ли он с врагом, но я не нашел, как это сделать в Pygame, и мне кажется, что это не очень эффективное решение, поскольку мне может понадобиться отправить несколько лучей на начать с. Также это характерно для трехмерного пространства - возможно, 2d игра, которую я имею, может пойти с базовой математикой.
Что я могу сделать, чтобы починить свою механику, чтобы она работала, только если игрок смотрит прямо на врага, а не только на расстоянии?