Python 敌人的举动是错误的,为什么?

Python 敌人的举动是错误的,为什么?,python,pygame,Python,Pygame,我想用pygame创建一个宇宙飞船游戏。我想这样做: 第一个敌人移动x坐标,敌人x坐标在x向右移动时增加 如果敌方坐标x>=WIDHT,敌方坐标y+=5,敌方x坐标在x向左移动时减小 如果敌人坐标x尝试移除你的移动功能,并在while循环中使用此功能替换: enemy.x += enemy_vel if enemy.x >= WIDTH - ENEMY_IMAGE.get_width() or enemy.x <= 0: enemy_vel *= -1 enemy_y

我想用pygame创建一个宇宙飞船游戏。我想这样做: 第一个敌人移动x坐标,敌人x坐标在x向右移动时增加 如果敌方坐标x>=WIDHT,敌方坐标y+=5,敌方x坐标在x向左移动时减小
如果敌人坐标x尝试移除你的移动功能,并在while循环中使用此功能替换:

enemy.x += enemy_vel
if enemy.x >= WIDTH - ENEMY_IMAGE.get_width() or enemy.x <= 0:
    enemy_vel *= -1
    enemy_y += 5

尝试删除移动功能,并在while循环中将其替换为:

enemy.x += enemy_vel
if enemy.x >= WIDTH - ENEMY_IMAGE.get_width() or enemy.x <= 0:
    enemy_vel *= -1
    enemy_y += 5

穿过敌人,在你的头脑中移动算法。所以敌人的x位置是684,速度被减去,剩下的x是679。下一次迭代,x回到<684,因此速度被相加,将x移回到684。它撞到了侧面。而且Y每一步都在增加。也许这是故意的,但它会沿对角线移动敌人的物体。在你的头脑中穿过敌人。移动算法。所以敌人的x位置是684,速度被减去,剩下的x是679。下一次迭代,x回到<684,因此速度被相加,将x移回到684。它撞到了侧面。而且Y每一步都在增加。也许这是故意的,但它会使敌人的物体斜向移动。这个答案是正确的,但最好能解释一下目前的错误,以及这个改变是如何解决这个问题的。谢谢你这么多的朋友。现在我非常高兴:@Kingsley你的右边,我来解释一下:首先,敌人的速度是5,所以x坐标向右移动了5个像素。在if语句中,它询问x坐标是大于宽度还是小于0。如果这是真的,那么你将速度乘以-1,因为这会产生相反的速度。最后,将y坐标加上5。@Softwareprogrammer94很高兴我能提供帮助:这个答案是正确的,但最好能解释一下当前的错误,以及这个更改是如何解决这个问题的。感谢这么多的朋友,它可以工作。现在我非常高兴:@Kingsley你的右边,我来解释一下:首先,敌人的速度是5,所以x坐标向右移动了5个像素。在if语句中,它询问x坐标是大于宽度还是小于0。如果这是真的,那么你将速度乘以-1,因为这会产生相反的速度。最后,将5添加到y坐标。@Softwareprogrammer94很高兴我能提供帮助:
class Ship:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.ship_img = None

    def draw(self, window):
        window.blit(self.ship_img, (self.x, self.y))

    def get_width(self):
        return self.ship_img.get_width()
    def get_height(self):
        return self.ship_img.get_height()

class Player(Ship):

    def __init__(self, x, y):
        super().__init__(x, y)
        self.ship_img = PLAYER_IMAGE
        self.mask = pygame.mask.from_surface(self.ship_img)

    def draw(self, window):
        super().draw(window)
class Enemy(Ship):

    def __init__(self, x, y):
        super().__init__(x,y)
        self.ship_img = ENEMY_IMAGE
        self.mask = pygame.mask.from_surface(self.ship_img)

    def move(self, vel):
        self.x += vel

        if self.x >= 684:
            self.x -= vel
            self.y += 5
        elif self.x <= 0:
            self.x += vel
            self.y += 5


def main():
    run = True
    FPS = 60
    clock = pygame.time.Clock()

    player = Player(350, 500)
    player_vel = 8
    enemy = Enemy(350, 100)
    enemy_vel = 5


    def redraw_window():
        WIN.blit(BG_IMAGE,(0,0))
        player.draw(WIN)
        enemy.draw(WIN)
        pygame.display.update()

    while run:
        clock.tick(FPS)
        redraw_window()
        enemy.move(enemy_vel)
        keys = pygame.key.get_pressed()
        if keys[pygame.K_RIGHT] and player.x + player_vel + player.get_width() < WIDTH:
            player.x += player_vel
        if keys[pygame.K_LEFT] and player.x - player_vel > 0:
            player.x -= player_vel



        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False


main()
enemy.x += enemy_vel
if enemy.x >= WIDTH - ENEMY_IMAGE.get_width() or enemy.x <= 0:
    enemy_vel *= -1
    enemy_y += 5