我这里有一个小程序,我在其中在窗口上绘制一些元素。
class CustomPointer{
void draw(); //draw png image on the screen
};
class CustomRectangle{
void draw(){
drawRect(); //draw Rectangle with a certain color
drawbtnImage(); //draw png image to the top right of rectangle (alphaBlending enabled)
}
};
main.cpp
CustomRectangle customRectangle;
CustomPointer customPointer;
void draw(){
drawBackgroundImage();
customRectangle.draw();
customPointer.draw();
}
当我使用上面的代码绘制我的元素时,我期望 customPointer
被绘制在屏幕上的所有其他元素上,因为指针正在绘制其他所有元素。但是我的指针出现在背景上,但在 customRectangle/btnImage
后面。
如何让我的 customPointer
始终覆盖窗口上的所有其他元素?
此外,我还希望我的 btnImage.draw()
绘制在自定义形状上(如控件右上角的圆形按钮)。 btnImage
是一个 png 并且它的侧面有一些透明度。但是,它没有出现在矩形上方,而是出现在矩形后面。要修复的类似问题。有什么建议吗?
最佳答案
我认为您应该使用一些用于 2D 空间的 Z 排序 zalgorithm。每个对象都应该有自己的 Z 值(它可以是整数),并且在全局 Draw 方法中,您使用此 Z 顺序进行排序。
对于最顶部的矩形,您可以将 Z 设置为某个较大的值,以便它始终是第一个/最后一个。
这在使用透明度时也会有所帮助。
void drawAll() {
sort_by_z_order();
foreach rect in sorted_rect_list {
draw_rect(rect)
}
}
关于c++ - 对屏幕上绘制的元素进行深度排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14597588/