2016-01-23 107 views
0

我的游戏中的敌方精灵移动速度相对较慢。当我将速度提高到1以上的任何速度时,他们在左方向移动速度非常快,在正确方向移动速度非常慢。有没有人知道背后的原因?提高AI精灵的移动速度

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 
+0

更新敌方位置的代码中的两个条件都可以在同一个调用中使用。 – usr2564301

+0

抱歉,我不明白你的意思? – Jim

+0

代码看起来不错 - 也许是'print()'在代码中的许多地方的敌人位置,看看它是如何改变的。也许首先你增加速度到位置,但后来你从位置减去一些价值,敌人移动速度变慢。 – furas

回答

1

由于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.speed改变self.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 
    ...