1

在我的 Xojo 应用程序中,我动态创建 Canvas 对象。我希望这些按特定顺序堆叠。但是,我似乎无法让图像以我想要的方式堆叠。如何指定图像出现的顺序?

4

3 回答 3

1

我假设您的意思是您在窗口中声明了一个控件数组,即您在窗口中有一个画布控件,其索引设置为 0。然后您使用new运算符添加新的画布控件实例。

我相信这些控件出现在数组中的顺序也是它们被绘制的顺序(或相反的顺序)。但这对你来说应该是显而易见的,我想。所以我猜你正在做更多导致你的困难的事情,但你还没有沟通过。

于 2016-10-04T11:49:23.310 回答
1

如果您尝试堆叠/平铺画布对象,那么您最好尝试在 canvas.paint 事件中处理各种图像。控件的堆叠几乎总是会导致性能不佳和闪烁(尤其是在 Windows 中)。

做你正在做的事情可能有正当的理由,但我怀疑这不是最好的 Xojo 方式。没有更多信息很难说。

想想旧动画已经完成的说法中的画布对象。您绘制背景,然后在下一层中绘制对象,然后再绘制下一层,依此类推。这非常快(我们创建了一个成熟的文字处理器,可以通过插入提示等来完成此操作)。

于 2016-10-04T14:02:20.207 回答
1

游戏晚了,但您可以通过将它们作为pixmapShapes插入到单个Canvas.Background中的图片对象中的Group2D对象中来更好地控制图像。一个示例可能如下所示:

dim pixmapA as new pixmapShape(pictureA)

dim composite as new group2D //behaves much like an array

composite.append(new pixmapShape(pictureB)) //lacks variable name (see pixmapA)
composite.item(0).rotation=.9 //but still editable if you know its index

composite.append(pixmapA) //on top and still addressable as 'pixmapA'
pixmapA.fill=50 //e.g. changed transparency

//add this group to a picture (lets suppose 'myPicture' exists)
myPicture.objects=composite
myCanvas.Backdrop=myPicture

//or you can paint to graphics
myPicture.graphics.drawObject(composite)

object2D 唯一的问题是它的坐标系在对象的中心有 0,0,而不是顶部,在其他任何地方都可以使用。

重读后,如果您必须有单独的画布来响应事件(例如,它们是自定义控件,这可能不可行)

于 2016-10-28T15:05:26.177 回答