Python: Как создать боевую / боевую систему - PullRequest
0 голосов
/ 08 мая 2019

Я использую 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 или как я мог бы создать это сам?Любая помощь будет оценена.

1 Ответ

0 голосов
/ 08 мая 2019

Теперь у меня нет опыта работы с Pygame, но я думаю, что вы просите фильтровать только те объекты (враги, крысы, которые могут быть кустами и т. Д.), Которые находятся в диапазоне ближнего боя.

Итак, нам нужен массив кортежей (x, y), из которых состоит диапазон ближнего боя.У игрока с нарисованным мечом всегда будет один.Есть много способов определить это, поэтому я просто буду придерживаться константного массива.

range = [(100,100),(100,101)]

Теперь мы отфильтруем объекты в диапазоне.

objects_in_melee_range = [obj for obj in all_game_objects if (obj[0],obj[1]) in range]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...