2016-01-23 88 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 
    ...