当检测到外星人时绘制光点

本文关键字:绘制 外星人 检测 | 更新日期: 2023-09-27 18:15:48

我确信这有一个非常简单的解决方案,但我只是不确定如何去做。事实上,我甚至不知道从哪里开始。

我正在尝试制作一款非常基本的游戏,其中几个(本地)玩家带着探测设备在单个屏幕关卡中行走,通过墙壁探测外星人。

当玩家打开他们的探测器时,任何在范围内的外星人都将被一个光点或矩形轮廓突出显示。光点将跟随移动的外星人。

每个玩家都有自己的颜色光点,这样他们就可以看到谁在探测哪个外星人。所以在同一个外星人上可以存在多个光点。

目前我有一个玩家对象,一个外星人对象和一个光点对象。

将它们结合起来的最佳方法是什么,以便在一个外星人上存在多个光点?

我试过这样做:

if (detector.Active)
{
    for (int i = Alien.aliensList.Count - 1; i >= 0; i--)
            {
                        new Blip(blipTexture, Alien.aliensList[i]);             
            }
}

但这只是每秒增加60次光点。所以我如何才能告诉游戏外星人已经有了我的一个光点,而不在乎是否有其他玩家的光点?

谢谢:)

当检测到外星人时绘制光点

可以在Blip类中添加对Alien的引用。在更新方法中,你需要移除被杀死的敌人或在雷达半径之外的敌人的眨眼,并为新的外星人添加新的眨眼。有一个链接可以很容易地避免重复。

你也可以使用字典来容纳所有的外星人。在本例中,为Blip添加AlienKey字段。我认为这种方法更可取,因为每个对象都有自己的唯一键,并且消除了堆中的浪费问题;)

我不确定这是否是最好的方法,但我最终通过为每个玩家使用两组列表来做我需要做的事情:-aliensInRangeList-aliensIveTargetedList

当外星人出现在玩家的范围内时,它被添加到aliensInRangeList中,然后该列表检查该外星人是否也存在于aliensIveTargetedList中。

如果外星人存在于aliensInRangeList中,但不存在于aliensIveTargetedList中,则该玩家在外星人上绘制一个光点。如果外星人同时存在于两个列表中,则不会绘制任何符号。

这样它就不会从同一个玩家那里绘制多个光点,而是从每个玩家那里绘制一个光点。