我正在用 C# 编写一个简单的控件,它的工作方式类似于图片框,但图像不断向上滚动(并从底部重新出现)。动画效果由计时器 (System.Threading.Timer) 驱动,该计时器从缓存图像(分为两部分)复制到隐藏缓冲区,然后在其 Paint 事件中将其绘制到控件的表面。
问题在于,当以每秒 20+ 帧的高帧率运行时,这种滚动动画效果会有些不稳定(在较低的帧率下,效果太小而无法感知)。我怀疑这种抖动是因为动画没有以任何方式与我的显示器的刷新率同步,这意味着每一帧在屏幕上停留的时间长度都是可变的,而不是恰好 25 毫秒。
有什么办法可以让这个动画平滑滚动?
您可以在此处下载示例应用程序(运行它并单击“开始”),源代码在此处。它看起来并不可怕,但如果你仔细观察它,你会看到打嗝。
警告:这个动画会产生一种非常奇怪的视错觉效果,可能会让你有点恶心。如果您观看它一段时间然后将其关闭,它看起来就像您的屏幕在垂直拉伸。
更新:作为一个实验,我尝试用我的滚动位图创建一个 AVI 文件。结果没有我的 WinForms 动画那么生涩,但仍然无法接受(而且看太久仍然让我感到恶心)。我想我遇到了与刷新率不同步的根本问题,所以我可能不得不坚持让人们对我的外表和个性感到厌烦。
我一直试图解决这个问题,但如果没有一些严肃的解决方法,我似乎无法弄明白.
如果我有以下HTML:
<ul>
<li class="parent"> headertext </li>
<li> text </li>
<li> text </li>
<li> text </li>
<li class="parent"> headertext </li>
<li> text </li>
<li> text </li>
</ul>
Run Code Online (Sandbox Code Playgroud)
现在,我现在如何选择<li>第一个父母之后的标签(或者第二个)?基本上选择<li>with class="parent"和以下兄弟姐妹,直到它<li>与父类一起到达另一个兄弟姐妹.
我可以使用嵌套列表重新构建列表,但我不想这样做.有什么建议?
它需要具有良好的代码完成支持,调试器和浏览代码的好方法(单击转到文档).
由于我被Java IDE(Eclipse)所破坏,如果它支持重构,引用搜索和某种形式的动态编译会很酷,但也许我要求太多了.
到目前为止,我尝试了Eclipse C++插件,Qt Creator和Code Blocks.Eclipse插件感觉迟钝,Code Blocks的完成程度要差得多,然后Qt Creator和Qt Creator非常适合Qt的东西,但有点难以用于自由形式的项目.
有什么其他的选择和第一手经验,因为尝试几个小时和每天使用的东西是两个不同的东西?
我有一个问题:
SELECT a.nick,grp,count(*) FROM help_mails h JOIN accounts a ON h.helper=a.id WHERE closed=1 GROUP BY helper, grp, a.nick
这次加入有什么问题?当我提出2个查询时:
SELECT helper,grp,count(*) FROM
它快100倍.help_mails h WHERE closed=1 GROUP BY helper, grp;
SELECT nick FROM accounts WHERE id IN (...)
EXPLAIN返回:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE h ref closed closed 1 const 1846 Using temporary; Using filesort 1 SIMPLE a ref PRIMARY PRIMARY 4 margonem.h.helper 1 Using where; Using index
accounts.id,help_mails.grp和help_mails.closed得到了索引.
我在编程生涯中曾经使用过很多C项目,头文件结构通常属于以下两种模式之一:
.h文件的每个.c文件,包含仅模块中定义的功能的原型.选项2的优点对我来说显而易见 - 它使得在多个项目之间共享模块更便宜,并使模块之间的依赖关系更容易看到.
但是选项1的优点是什么?它必须具有一些优势,否则就不会那么受欢迎.
这个问题适用于C++和C,但我从未在C++项目中看到#1.
#defines,structs等的放置也各不相同,但对于这个问题,我想关注函数原型.
是什么导致这种情况发生?(鼠标未被移动或点击)