2011-08-13 66 views
2

我目前正在开发一个程序来显示和控制桌面上的动画精灵。现在我的问题是将它们绘制到屏幕上。只要精灵不阻碍它,用户仍然应该能够访问其他应用程序。在(桌面)屏幕上绘制形状移动对象

我的尝试在下面,我希望有人能指引我走向正确的方向。我并不关心我需要使用哪个库,只要性能足够满足20-30个动画精灵的需求。

我尝试至今:

  1. 我第一次尝试使用Qt。我用QWidget和QLabel来显示对象的像素图。像素本身有一个alpha通道,我使用QWidget的setMask(pixmap.mask())方法去除任何我不想显示的东西,但是这种方法不能用于快速移动形状,比如移动生物。如果setMask被调用所有的50-100ms来改变掩码到下一个移动相位,那么CPU负载会变得很高,同时有很多生物同时移动。

  2. 我的第二次尝试是使用一个QWidget所有的生物,这样setMask不是每次召唤一次,而是每次只能召唤一次,可以用这种方式移动更多的生物,但当鼠标指针移动到生物上时,屏幕会像地狱一样闪烁。尝试Xlib的XShape函数来改变每个生物的形状,但表现并不比setMask好多少。

  3. 我试过Qt中的透明度,但是如果我在整个屏幕上使用QWidget,移动鼠标时X的CPU负载会变得非常高。我不知道,如果我能在这里做更好的事情。

+1

你的整个问题可以用概括请尝试修剪这段文字。我们不需要任何第一个子弹列表,你的程序的细节与实际问题无关。 – meagar

+0

你是对的文本墙。我是挂了我的问题,并认为“更多信息的更好的人能理解我的问题” – WkoD

回答

1

创建一个QGLWidget并学会使用OpenGL API在其中绘制精灵,即使只使用glDrawPixels而不是纹理对象。

你肯定不会有画几十精灵的任何问题,并花了学习的OpenGL的时间将是一个很好的投资,如果你渴望在未来进行更复杂的图形化的东西。

+0

所以使用QGLWidget来,我将能够吸引全国各地的台式机和其它应用程序可用/点击?你可能会给一些关键字(函数等),所以我可以搜索它们吗? – WkoD

+0

我想你会创建QGLWidget Qt :: Desktop标志传递给它的Qt :: WindowFlags参数。或者,也许与QDesktopWidget父它(或它的一个屏幕...多屏幕OpenGL可能会非常棘手)从获得的QApplication ::桌面()。 – timday