提高AI spri的移动速度

2024-03-28 16:09:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我的敌人精灵在我的游戏移动相对缓慢。当我把速度提高到任何超过1的速度时,它们在左方向移动的非常快,在右方向移动的有点慢。有人知道这背后的原因吗?你知道吗

class Enemy(pygame.sprite.Sprite):
def __init__(self,x,y,width = 60, height = 55):
    pygame.sprite.Sprite.__init__(self)

    self.x = x
    self.y = y
    self.speed = 1

    self.s0 = pygame.image.load("Images/Enemy/s0.png")
    s1 = pygame.image.load("Images/Enemy/s1.png")
    s2 = pygame.image.load("Images/Enemy/s2.png")
    s3 = pygame.image.load("Images/Enemy/s3.png")
    rs0 = pygame.transform.flip(self.s0 ,True, False)
    rs1 = pygame.transform.flip(s1 ,True, False)
    rs2 = pygame.transform.flip(s2 ,True, False)
    rs3 = pygame.transform.flip(s3 ,True, False)

    self.attack = pygame.image.load("Images/Enemy/attack.png")
    self.rattack = pygame.image.load("Images/Enemy/rotatedattack.png")

    self.images = []
    self.images.append(self.s0)
    self.images.append(s1)
    self.images.append(s2)
    self.images.append(s3)

    self.rotated_images = []
    self.rotated_images.append(rs0)
    self.rotated_images.append(rs1)
    self.rotated_images.append(rs2)
    self.rotated_images.append(rs3)     

    self.deadimages= [self.attack]
    self.index = 0
    self.TimeNum=0
    self.TimeTarget=10

    self.image = self.images[self.index]
    self.rect = pygame.Rect(self.x,self.y,width,height)

    self.playercollision = False
    self.Timer = 0

def update(self,player):

    if self.rect.colliderect(player.rect):
        print("hey")
        self.Timer += 1
        if self.Timer >= 10:
            if self.rect.x > player.rect.x:
                self.image = self.attack

            if self.rect.x < player.rect.x:
                self.image = self.rattack

    if player.rect.x == 0:
        self.image = self.s0

def Enemy1Move(self,player):
    if player.rect.x > 0 and player.rect.x < 655:

        if self.rect.x < player.rect.x:
            self.rect.x += self.speed
            self.TimeNum+=1
            if self.TimeNum == self.TimeTarget:
                self.index +=1
                if self.index >= len(self.rotated_images):
                    self.index = 0
                self.image = self.rotated_images[self.index]

                self.TimeNum = 0

        if self.rect.x > player.rect.x:
            self.rect.x -= self.speed
            self.TimeNum +=1
            if self.TimeNum == self.TimeTarget:
                self.index +=1
                if self.index >= len(self.images):
                    self.index = 0
                self.image = self.images[self.index]

                self.TimeNum = 0

Tags: rectimageselfindexifpngloadpygame
1条回答
网友
1楼 · 发布于 2024-03-28 16:09:27

正如Jongware在评论中所说的,问题可能是两个if语句在对Enemy1Move的同一个调用中都是真的。你知道吗

假设self.speed是5,self.rect.x是100,player.rect.x是102。你知道吗

现在if self.rect.x < player.rect.x:是真的,并且self.rect.x += self.speedself.rect.x更改为105。你知道吗

当函数仍在运行时,下一个if语句if self.rect.x > player.rect.x:也是真的,并且self.rect.x -= self.speedself.rect.x更改回100。你知道吗

考虑使用elif

if self.rect.x < player.rect.x:
    self.rect.x += self.speed
    ...
elif self.rect.x > player.rect.x:
    self.rect.x -= self.speed
    ...

相关问题 更多 >