我想移动我的文字,但如果我使用void onClick(int button, int state, int x, int y) {
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
drawHouse(x,y);
}
,我的应用就会卡住。我认为使用System.Threading.Thread.Sleep()
是解决问题的好方法,但请告诉我如何做。我也试图使用Timer
,但我没有通过这种方式解决它。
Animate()
假设我单击某个按钮然后出现文本 - “+1”并且它将向上移动并降低不透明度。最后它会消失。
答案 0 :(得分:0)
您必须在Timer
循环中创建for
,并用Tick
事件替换循环。目前,您在每次循环迭代中重新创建Timer
。将它作为控件的组件,如下所示:
// Timer Interval is set to 0,5 second
private Timer _timer = new Timer { Interval = 500 };
并在控件中添加以下字段
private int _index = 0;
private int _maxIndex = 30;
在此delegate
事件中添加Tick
后,会在每个刻度线上向上移动文本。
this._timer.Tick += delegate
{
if (this._index < this._maxIndex)
{
var alphaValue = 255 - this._index * 8;
Brush snizovaniViditelnosti = new SolidBrush(Color.FromArgb(alphaValue, 255, 255, 255));
g.DrawString("+1", fontPridaniMaterialu, snizovaniViditelnosti, MousePosition.X, MousePosition.Y - this._index);
Refresh();
this._index++;
}
else
{
this._timer.Stop();
}
};
如果您只想降低不透明度,请降低alpha
值并保留颜色 - 如上例所示。
并将其连接到您的Button
点击事件
private void Button_Click(object sender, EventArgs e)
{
this._timer.Start();
}
提示:这只是一个项目的快速解决方案。如果您要为多个项目执行此操作,则可以在包含文本的代码中添加一个类,Timer
以及当前和maxIndex。
我猜你正在使用winforms
在重新绘制UI时避免闪烁。你应该激活double buffering
查看有关Handling and Raising Events
正如@apocalypse在他的回答中所建议的那样。最好为文本设置修复开始位置以便向上移动。
答案 1 :(得分:0)
从工具箱中抓取Timer
和Button
。
然后选择timer
并转到events
中的properties window
部分。双击Tick
事件。应用你的逻辑移动文本。
对于按钮,您需要使用click
事件。
示例代码:
private void timer1_Tick (object sender, EventArgs e)
{
button1.Location = new Point (button1.Location.X + 1, button1.Location.Y);
}
private void button1_Click (object sender, EventArgs e)
{
timer1.Start ();
}