有没有更好的方法来繁殖敌人的位置?

2024-05-16 13:07:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个游戏,在部落式游戏中生存。我已将其设置为敌人将走向玩家的位置。如果他们打了球员,他们会夺走他的一些健康。如果玩家向他们开枪,他们就会死亡/消失,玩家会得到一两分

我想让敌人在屏幕外一定距离内繁殖,然后走到屏幕上,这样你就不会在敌人的5像素外或在你身上开始游戏

我想尝试创建一个if语句,只在敌人不在某个范围内时才将其添加到精灵列表中,但是许多精灵根本不会繁殖,从而取消了我控制实际繁殖的敌人数量的能力

下面是我如何繁殖敌人的结构。正如你们所看到的,有些在屏幕上向任何方向喷射200像素远,这很好,但它们也可以在我的播放器上产生

如果你想知道,我的敌人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)

Tags: rectadd游戏屏幕玩家random像素screen
1条回答
网友
1楼 · 发布于 2024-05-16 13:07:59

使用应用程序循环生成敌人。创建一个随机位置并尝试放置敌人。如果敌人因为离另一个敌人太近而不能产卵,跳过他们,等待下一帧。只要敌人数量少于请求的敌人数量,就尝试繁殖敌人:

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)

    # [...]

相关问题 更多 >