Игрок застревает при ударе о стену pygame

#python #pygame

Вопрос:

Поэтому я попытался заставить врага развернуться, когда ударился о стену, и он застрял.

Это код только для врага: (Размер экрана 1000 на 1000, кстати)

 xEnemy = random.randint(0,1000)
yEnemy = random.randint(0,1000)

#enemy
def enemy():
    global xEnemy, yEnemy
    pygame.draw.rect(screen,(255,0,0),(xEnemy,yEnemy,15,15))
    
    if xEnemy > 0 and xEnemy < 1000:
        xEnemy -=velEnemy
        if xEnemy < 0 and xEnemy > 10:
            xEnemy  = velEnemy
 

Комментарии:

1. xEnemy < 0 and xEnemy > 10 это никогда не бывает правдой. Кроме того, даже если вы скорректировали его в соответствии с тем, что вы, вероятно, имеете в виду, остерегайтесь (а) эффекта вложенности этого if под предыдущим и (б) возможности запуска обоих условных условий, поэтому вы вычитаете velEnemy , а затем добавляете его снова, без результирующего эффекта.

2. xEnemy < 0 and xEnemy > 10 следует заменить на xEnemy < 0 or xEnemy > 1000 . Кроме того, если это условие верно, вы хотите впоследствии изменить скорость противника, velEnemy = -velEnemy

3. если ксенемия > 0: Ксенемия -=веленемия, если ксенемия >

4. Этот код заставляет противника стоять, потому что оба условия выполняются одновременно

5. Так как же мне заставить его сменить направление, когда он дойдет до конца

Ответ №1:

Вы должны изменить скорость, если xEnemy > 1000 или xEnemy < 0 . Если xEnemy > 1000 скорость должна стать отрицательной. Если xEnemy < 0 , то скорость должна стать положительной. Абсолютную величину скорости можно получить с abs(velEnemy) помощью . Не забывай global velEnemy

 def enemy():
    global xEnemy, yEnemy, velEnemy

    if xEnemy < 0:
        velEnemy = abs(velEnemy)
    if xEnemy > 1000:
        velEnemy = -abs(velEnemy)
    xEnemy  = velEnemy

    pygame.draw.rect(screen, (255,0,0), (xEnemy, yEnemy, 15, 15))