список индекса вне допустимого диапазона Ошибка Pygame Как исправить? - PullRequest
1 голос
/ 21 июня 2020
    window.blit(self.esright[self.Walking//3], (self.x,self.y))
IndexError: list index out of range
1001 * Я не знаю, как это исправить, я попытался исправить это, но я получаю ту же ошибку,
        # this makes the enemy move right and left
        def draw(self,window):
            self.move()
            if self.Walking + 1 >= 33:
                self.Walking = 0
            if self.vel > 0:
                window.blit(self.esright[self.Walking//3], (self.x,self.y))
                self.Walking += 1
            else:
                window.blit(self.esleft[self.Walking//3], (self.x,self.y))
                self.Walking += 1

1004 * класс противника
 # ---------------------------------------------- # this for bird my g LOl
 
    class bird:
        def __init__(self,x,y,height,width,end):
            self.x = x
            self.y =y
            self.esright = [pygame.image.load("bird1.png"),
            pygame.image.load("bird2.png"),
            pygame.image.load("bird3.png"),
            pygame.image.load("bird4.png")
                              ]
            self.esleft = [pygame.image.load("b1.png"),
            pygame.image.load("b2.png"),
            pygame.image.load("b3.png"),
            pygame.image.load("b4.png")
                              ]
            self.esright = [pygame.transform.scale(image,(image.get_width()//5,image.get_height()//5)) for image in self.esright]
            self.esleft = [pygame.transform.scale(image,(image.get_width()//5,image.get_height()//5)) for image in self.esleft]
            self.height = height
            self.width = width
            self.distance = 80
            self.speed = 8
            self.vel = 3
            self.path = [x,end]
            self.Walking = 0
            self.hitbox = (self.x + 17, self.y + 2, 31, 57)
            self.rect = pygame.Rect(x,y,height,width)
            # enemys health
            self.health = 10
            self.soko = 0
            self.visible = True
        # this makes the enemy move right and left
        def draw(self,window):
            
            self.move()
            if self.Walking + 1 >= 33:
                self.Walking = 0
            elif self.vel > 0:
                window.blit(self.esright[self.Walking//3], (self.x,self.y))
                self.Walking += 1
            else:
                window.blit(self.esleft[self.Walking//3], (self.x,self.y))
                self.Walking += 1

    # this moves the enemy left and right
        def move(self):
            if self.visible:
                if self.vel > 0:
                   if self.x + self.vel < self.path[1]:
                       self.x += self.vel
                   else:
                       self.vel = self.vel * -1
                       self.Walking = 0
                else:
                   if self.x - self.vel >  self.path[0]:
                       self.x += self.vel
                   else:
                       self.vel = self.vel * -1
                       self.Walking = 0
                    # the hit box for the enemy the health
                pygame.draw.rect(window, (255,0,0), (self.hitbox[0], self.hitbox[1] - 20, 70, 10)) # NEW
                pygame.draw.rect(window, (0,255,0), (self.hitbox[0], self.hitbox[1] - 20, 70 - (5 * (10 - self.health)), 10))
                self.hitbox = (self.x + 47, self.y + 31, 50, 72)

     
    # THIS PART MAKES  the enemy not scroll with the player
        def scroll(self,sx, sy):
            self.x += sx
            self.y += sy
            self.path[0] += sx
            self.path[1] += sx



    # define the enemy class
    black = (0,0,0)
    bird1 = bird(300,199,104,64,500)
    birds = [bird1]

fefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefesfefes

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Измените self.Walking//3 на self.Walking % 4
, если вы хотите, чтобы он вычислялся на каждой итерации, например:
0 1 2 3 0 1 2 3 0 1...etc

Замените self.Walking//3 на int(self.Walking / 4) % 4
, если вы хотите, чтобы он вычислялся на каждой итерации, например:
0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 0 0 0 0 1 1 1 1...etc

1 голос
/ 21 июня 2020

Попробуйте сделать свой второй оператор if частью elif, как этот, я думаю

def draw(self,window):
        self.move()
        if self.Walking + 1 >= 33:
            self.Walking = 0
        elif self.vel > 0:
            window.blit(self.esright[self.Walking//3], (self.x,self.y))
            self.Walking += 1
        else:
            window.blit(self.esleft[self.Walking//3], (self.x,self.y))
            self.Walking += 1

или попробуйте сделать отступ в self.move () до операторов if, elif, else

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...