在(桌面)屏幕上绘制形状移动对象

时间:2011-08-13 09:51:31

标签: c++ linux drawing desktop

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

我的尝试在下面,我希望,有人可以指出我正确的方向。我真的不关心我需要使用哪个库,只要性能足够大约20-30个动画精灵。

到目前为止我的尝试:

  1. 我的第一次尝试是Qt。我在其中使用了带有QLabel的QWidget来显示对象的像素图。像素图本身有一个alpha通道,我使用QWidget的“setMask(pixmap.mask()”方法来删除任何我不想要显示的东西。但是这种方法不能用于快速移动形状,比如移动生物如果调用setMask所有50-100ms将掩码更改为下一个运动阶段,那么cpu负载会变高,同时会有很多生物移动。

  2. 我的第二次尝试是为所有生物使用一个QWidget。这样setMask只被调用一次而不是每个生物一次。可以用这种方式移动更多的生物,但是当鼠标指针移动到生物上时,屏幕会像地狱一样闪烁。

  3. 我的第三次尝试是来自Xlib的XShape函数来改变每个生物的形状,但性能并不比setMask好很多。

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

2 个答案:

答案 0 :(得分:1)

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

绘制几十个精灵当然不会有任何问题,如果你希望将来能够做更复杂的图形化事务,花在学习OpenGL上的时间将是一个很好的投资。

答案 1 :(得分:0)

不确定这是否是您的语言但是ESheep在GitHub上,可以帮助您入门:https://github.com/Adrianotiger/desktopPet