在显示openGL后删除文本
Deleting text after it has shown openGL
我正在用c++和OpenGL编写一个3D游戏。
我想做的是,当玩家与物体碰撞时,屏幕上出现一小段文字,然后在几秒钟后消失。
我知道如何在碰撞上将文本本身绘制到屏幕上。我的问题是我不知道如何在几秒钟后删除文本。
我正在使用这个函数在屏幕上绘制文本:
void Gui::drawStrokeText(_In_ const string& p_string, _In_ int p_x, _In_ int p_y, _In_ int p_z)
{
glPushMatrix();
glTranslatef(p_x, p_y, p_z);
glScalef(0.25f, -0.25f, p_z);
glColor4f(200/255.f, 200/255.f, 200/255.f, 128/255.f);
for (int i = 0; i < p_string.size(); ++i)
{
glutStrokeCharacter(GLUT_STROKE_ROMAN , p_string[i]);
}
glPopMatrix();
}
所以要澄清从屏幕上删除文本的更好方法是什么?
整个班级可以在这里找到
显然,你必须有某种计时器来检查你是否必须在这一帧中绘制某些内容(主循环中的单个步骤)或时间过期并且必须隐藏它(等于简单地不绘制)。
下面是一个快速(伪)代码示例(可能包含错误!)查看方法,而不是语法):Timer* g_Timer; // timer, for example wrapped std::chrono or Windows QueryPerformanceCounter()
Renderer* g_Renderer;
int main()
{
...
while( running ) // main loop
{
...
g_Timer->Tick(); // calculate delta time, FPS, etc.
g_Renderer->RenderOneFrame();
...
}
...
}
class GameObject
{
public:
void ShowText( const std::wstring& text, const float currentTime, const float showDuration )
{
hideTextTime = currentTime + showDuration;
collisionText = text;
}
float WhenWeMustHideText() const { return hideTextTime; }
std::wstring GetCollisionText() const { return collisionText; }
private:
float hideTextTime;
std::wstring collisionText;
};
void RenderOneFrame()
{
...
float time = g_Timer->GetTime(); // time elapsed since game start in milliseconds
float dt = g_Timer->GetDelta(); // time elapsed since previous frame in milliseconds
...
for(int i = 0; i < numObjects; ++i)
{
// check collision somehow
if( object[i]->HasCollision() )
{
object->ShowText( L"Boom!", time , 5000.0f );
}
// check if we must draw text or just forget to do this ("hide")
if ( time <= object[i]->WhenWeMustHideText() )
{
g_Renderer->DrawText(object[i]->GetCollisionText(), object[i]->GetPosition() + offset);
}
...
}
...
}
希望有帮助!
相关文章:
- 如何更新和删除文本文件中的特定逗号分隔值?C++
- 如何在文件仍处于打开状态时删除文本文件的内容(无需重新打开文件)?
- 试图打开并读取一个.txt文件,但它从原始文件中删除了实际文本(Qt GUI C++
- 从文本文件中读取数据并删除所有换行符空格,并在 C++ 控制台中显示
- C++ 删除文本文件中的特定行号
- C++是否可以将宏重写浮点文本为双文本或至少删除 f 后缀?
- 使用QT,如何在不读取整个文件的情况下删除文本文件中的第一行
- 如何在C++中删除文本文件中的特定行
- 如何在Visual c++中通过更改组合框中的选项来添加或删除文本框
- 如何在C++中删除文本文件中的空行
- 视觉C++删除文本文件中位于特定单词之前/之后的所有内容
- 从 qt 进度条中删除文本
- C ++不断删除文本文件中的行
- 我尝试删除文本文件中的行会留下回车
- 使用 windows.h,在鼠标单击 (C++) 时从聊天框中删除文本
- 如何删除文本文件C++中的最后一个字符
- 删除文本文件C++的部分内容
- 如何使用c++更改,替换或删除文本文件中的一行
- 在显示openGL后删除文本
- 基于一个1变量删除文本文件中的特定行