如何使用Update方法中的if语句将新图像添加到XNA C#中已经运行的游戏的窗口中

本文关键字:XNA 添加 运行 窗口 游戏 if 方法 Update 何使用 语句 新图像 | 更新日期: 2023-09-27 18:23:52

我很确定以前有人问过这样的问题,但我一直没能找到。不管怎样,我正在制作一个简单的游戏动画,里面有两个移动的物体(万圣节主题)。物体撞击时会从墙上反弹,但我也需要在两个物体相互撞击时显示一张图像。我尝试了多种方法,但都不起作用。它们要么没有效果,要么引发错误。不管怎样,这是我最后一次尝试:

 public PumpkinCheckCollisionPumpkin(GameTime gameTime)
    {
        if (pumpkin1.BoundingBox.Intersects(pumpkin2.BoundingBox))
        {
            pumpkinCollide = True;
            Draw(gameTime);
        }

然后我试着把那个bool(我之前设置为false)传给绘图部分,但没有成功。上面的方法是在Update方法中调用的。我试着在更新(GameTimegameTime)部分调用draw方法,但也不起作用。当我的两个对象碰撞时,除了已经显示的图像之外,我如何触发另一个图像的显示?(而且,这种公开的方法最初是私人的,但后来公开了,所以我尝试的另一种策略可能会奏效(没有奏效))。

如何使用Update方法中的if语句将新图像添加到XNA C#中已经运行的游戏的窗口中

答案很简单,永远不要直接调用Draw函数

在这种情况下,我将设置一个类级状态变量,该变量包含这样一个事实,即在下一个draw调用中应该绘制碰撞图形,然后可能会发生这种情况。

不管怎样,你每次画画都会擦除,所以即使调用正确,下一次Draw调用(很快就会发生)也会擦除它。出于同样的原因,在Draw调用发生后不要取消设置标志,因为它被擦除的速度会比你的玩家看到的快。你需要在屏幕上保留一段时间。

您可以通过设置一个变量来实现这一点,该变量保存设置标志的时间,然后根据当前时间进行检查,直到经过足够的"可见"时间。这将清除"显示碰撞"标志,图形将不再绘制。

只需让框架处理调用的时间,并让您设置的状态驱动所绘制的内容。