首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提高AI精灵的移动速度

提高AI精灵的移动速度
EN

Stack Overflow用户
提问于 2016-01-23 21:22:07
回答 1查看 101关注 0票数 0

我的敌人精灵在我的游戏中移动的比较慢。当我把速度提高到任何大于1的速度时,它们在左边移动得非常快,在右边移动得有点慢。有人知道这背后的原因吗?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2016-01-25 17:00:40

由于Jongware已经在评论中表示遗憾,问题可能是在同一个Enemy1Move调用中两个if语句可能是真的。

假设self.speed为5,self.rect.x为100,player.rect.x为102。

现在if self.rect.x < player.rect.x:为true,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

代码语言:javascript
复制
if self.rect.x < player.rect.x:
    self.rect.x += self.speed
    ...
elif self.rect.x > player.rect.x:
    self.rect.x -= self.speed
    ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34963971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档