【问题标题】:Is there a better way to spawn enemy locations?有没有更好的方法来生成敌人的位置?
【发布时间】:2020-11-14 21:41:17
【问题描述】:

我正在制作一个 pygame,在 hord 类型的游戏中生存下来。我把它设置在敌人会走向玩家的地方。如果他们击中玩家,他们会拿走他的一些生命值。如果玩家射击它们,它们就会死亡/消失,而玩家会得到一两分。

我希望敌人在一定距离内全部生成在屏幕外,然后走到屏幕上,这样你就不会在敌人 5 像素外或在你上方开始游戏。

我想尝试创建一个 if 语句,如果敌人不在特定范围内,它只会将敌人添加到精灵列表中,但是很多精灵根本不会产生,从而消除了我控制实际数量的能力生成的敌人。

下面是我如何生成敌人的结构。如您所见,有些会在屏幕外向任何方向 200 像素外生成,这很好,但它们也可以在我的播放器顶部生成。

如果您想知道,我的 Enemy_1pt 类的输入是(图像、速度、健康)

for i in range(10):
    enemy_1pt = Enemy_1pt(fire_drake_image,1.5,1)
    enemy_1pt.rect.x = random.randrange(-200,screen_width+200)
    enemy_1pt.rect.y = random.randrange(-200,screen_height+200)
    enemy_1pt_list.add(enemy_1pt)
    all_sprites_list.add(enemy_1pt)

【问题讨论】:

    标签: python python-3.x random pygame


    【解决方案1】:

    使用应用程序循环来生成敌人。创建一个随机位置并尝试放置敌人。如果敌人因为太靠近另一个敌人而无法生成,请跳过它们并等待下一帧。只要敌人的数量少于请求的敌人数量,就尝试生成敌人:

    import math
    
    no_of_enemies = 10
    minimum_distance = 100
    
    # application loop
    while True:
    
        if len(all_sprites_list.sprites()) < no_of_enemies:
    
            # try to spawn enemy  
            x = random.randrange(-200,screen_width+200)
            y = random.randrange(-200,screen_height+200) 
    
            spawn = True
            for enemy in enemy_1pt_list:
                ex, ey = enemy.rect.center
                distance = math.hypot(ex - x, ey - y)
                if distance < minimum_distance: 
                    spawn = False
                    break
    
            if spawn:
                enemy_1pt = Enemy_1pt(fire_drake_image,1.5,1)
                enemy_1pt.rect.center = x, y
                enemy_1pt_list.add(enemy_1pt)
                all_sprites_list.add(enemy_1pt)
    
        # [...]
    

    【讨论】:

    • 问题是我的应用程序循环分为多个级别,所以每个级别都是一个不同的循环。我不能只说 no_of_enemies = 10,因为这适用于所有级别,对吧?
    • @JoshStapley 我不知道您的应用程序的结构,但这没关系。 no_of_enemies 是一个变量。它的价值是可以改变的。因此,不同的级别 -> 不同的价值。此外,如果一个敌人被杀死并且不打算“再次崛起”,no_enemies 可以递减。 no_enemies 的值可以是动态的,表示当前请求的敌人的数量。它可以在应用程序中的任何时候更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2013-04-11
    • 1970-01-01
    相关资源
    最近更新 更多