XNA 4.0:如何在绘制到屏幕后删除文本?

XNA 4.0:如何在绘制到屏幕后删除文本?,xna,xna-4.0,drawstring,spritebatch,Xna,Xna 4.0,Drawstring,Spritebatch,大家好 我试图用以下代码将文本“passcomplete!”绘制到屏幕: spriteBatch.DrawString(字体“passcomplete!”,新矢量2(30130),彩色.白色) 它会触发正确的IF语句。但是,如何从屏幕上删除该文本?我真的一点也不确定接下来该怎么做,我的老师想让我用谷歌搜索答案,或者在课本上找到答案。我已经翻遍了我的XNA教科书,我没有找到删除该文本的出口 谢谢你的帮助 更新: protected override void Draw(游戏时间游戏时间) 我在这里

大家好

我试图用以下代码将文本“passcomplete!”绘制到屏幕:

spriteBatch.DrawString(字体“passcomplete!”,新矢量2(30130),彩色.白色)

它会触发正确的IF语句。但是,如何从屏幕上删除该文本?我真的一点也不确定接下来该怎么做,我的老师想让我用谷歌搜索答案,或者在课本上找到答案。我已经翻遍了我的XNA教科书,我没有找到删除该文本的出口

谢谢你的帮助

更新:

protected override void Draw(游戏时间游戏时间)

我在这里包含了IF语句。基本上,它会检查与p_接收器的碰撞,如果它被布尔检查出来,它就会画出拉丝。我应该从另一个角度看这个问题吗

最终版本:

我继续以以下内容作为答案,它比以前工作得更好。:)

现在工作很好


我很感激。

很多游戏在每次绘制循环中都会重新绘制整个窗口/屏幕,因此很有可能删除它的解决方案就是停止绘制

i、 e.当不再需要时,让您的if条件不绘制文本


另一方面,如果您有一些更复杂的绘图逻辑,只绘制需要更新的窗口/屏幕部分,那么您将需要包含逻辑,以便在不再需要文本时重新绘制包含文本的屏幕部分。

我通过将带有一些参数的文本添加到通用列表中的函数来完成此操作。然后我更新并从列表中提取项目。在伪代码中:

function addText(text,position,duration)
    texts.add(new t(text,position,duration))
end function

function updateText()
    for each t as text in texts.findall(where t.active)
        t.duration -= 1
        if t.duration < 0 then t.active = false
    next
end function

function drawText()
    for each t as text in texts.findall(where t.active)
        //draw it
    next
end function
函数addText(文本、位置、持续时间)
文本。添加(新的t(文本、位置、持续时间))
端函数
函数updateText()
对于每个t作为text.findall中的文本(其中t.active)
t、 持续时间-=1
如果t.duration<0,则t.active=false
下一个
端函数
函数drawText()
对于每个t作为text.findall中的文本(其中t.active)
//画出来
下一个
端函数

因此,您可以在屏幕上的不同位置和持续时间添加无限数量的文本。

那么,我是否应该在屏幕内配置一个块,用于屏幕更新并在其上绘制?它很简单,因为我用背景作为颜色。暗绿色对于初学者级的XNA应用程序来说,只重绘屏幕的一部分是很不寻常的。更有可能的是,你的应用程序在每个绘图周期都会重新绘制整个屏幕。您是否能够在spriteBatch.DrawString(…)调用上设置断点以确认这一点?如果它确实每次都被重新绘制,那么简单的答案是,要删除它,你只需要停止绘制它。你是对的,它在循环中被一次又一次地重新绘制。所以我应该再加一张支票,我猜?可能是一个While语句?不需要While语句。您只需更改drawstring调用周围的if条件,以便它在您不再需要显示字符串后不会绘制字符串。问问自己,确定何时不再绘制文本的条件是什么(例如,最初出现在屏幕上的2秒钟后,当物体不再接触时等)。然后调整并再次检查您的if条件是否正确决定了这些事情。
function addText(text,position,duration)
    texts.add(new t(text,position,duration))
end function

function updateText()
    for each t as text in texts.findall(where t.active)
        t.duration -= 1
        if t.duration < 0 then t.active = false
    next
end function

function drawText()
    for each t as text in texts.findall(where t.active)
        //draw it
    next
end function