Я использую python для создания боевой / боевой системы в модуле pygame.По сути, у меня есть крыса, управляемая ratX и ratY, и у меня есть игрок, контролируемый var x и y.Крыса будет просто следовать за игроком с помощью этого кода:
if movement == True:
if x > 0:
if ratX != x:
if ratX > x:
ratX -= 1
ratFacing = 1
else:
ratX += 1
ratFacing = -1
if y > 0:
if ratY != y+30:
if ratY > y+30:
ratY -= 1
else:
ratY += 1
После этого, когда крыса приблизится к игроку (не менее 40 пикселей), этот код обнаружит это с помощью формулы расстояния и вычтетздоровье игрока:
if (math.sqrt( ( (ratX - x) **2) + ( (ratY - y)**2) ) < 40):
x -= 10*ratFacing
if plyrHealth > 1:
plyrHealth -= 1
ratX += 40*ratFacing
else:
run = False
Теперь я добавил боевую систему, в которой игрок будет размахивать мечом, а предмет будет вращаться в зависимости от переменной ra
.Если эта переменная равна -55, это означает, что игрок дошел до того момента, когда меч может нанести урон.Если игрок находится в пределах досягаемости (не менее 100 пикселей), это означает, что он может атаковать крысу и нанести ей урон:
if ra == -55 and (math.sqrt( ( (ratX - x) **2) + ( (ratY - y)**2) ) < 100): #Line that checks if sword has swung and the plyr is in range
dam = itemInHand[11] #This is the amount of damage that the specific sword in hand does
if isJump:
dam *= 3
if ratHealth - dam <= 0:
ratHealth = 0
else:
ratHealth -= dam
Основная проблема заключается в том, что с тех пор я использую формулу расстоянияи я просто проверяю, находится ли игрок в зоне действия этой крысы, он может атаковать врага, даже если он не находится лицом к нему.Можно ли, например, создать трассировку линии, которая бы возвращала список любых объектов, с которыми она столкнулась?Таким образом, единственный способ обнаружить коллизию - это если бы была невидимая линия, которая возвращала бы true, если она столкнулась.Есть ли встроенный способ сделать это в Python или как я мог бы создать это сам?Любая помощь будет оценена.