私の Xojo アプリケーションでは、Canvas オブジェクトを動的に作成します。これらを特定の順序で積み重ねたい。ただし、イメージを思いどおりにスタックすることはできないようです。画像が表示される順序を指定するにはどうすればよいですか?
3 に答える
Window で宣言された Control 配列があること、つまり Window に Canvas コントロールがあり、その Index が 0 に設定されていることを意味していると思います。そして、new
演算子を使用して新しい Canvas Control インスタンスを追加します。
これらのコントロールが配列に表示される順序は、それらが描画される順序 (またはその逆) でもあると思います。しかし、それはあなたには明らかなはずです。ですから、あなたはさらに困難を引き起こす何かをしていると思いますが、まだそれを伝えていません。
ゲームには遅れていますが、単一のCanvas.BackgroundのObjects of a PictureのGroup2DオブジェクトにpixmapShapesとして画像を挿入することで、画像をより細かく制御できる場合があります。例は次のようになります。
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 を持ち、他の場所で使用されていることです。
再読み込み時に、イベントに応答するために別のキャンバスが必要な場合(たとえば、それらがカスタム コントロールである場合、これは機能しない可能性があります)
キャンバス オブジェクトをスタック/タイル表示しようとしている場合は、canvas.paint イベント内でさまざまな画像を操作する方がよい場合があります。コントロールを積み重ねると、ほとんどの場合、パフォーマンスの低下とちらつきが保証されます (特に Windows の場合)。
あなたがしていることには正当な理由があるかもしれませんが、それは Xojo の最善の方法ではないと思います。これ以上の情報がなければ、なんとも言えません。
古いアニメーションが行われたと言うキャンバス オブジェクトについて考えてみてください。背景を描いてから、次のレイヤーのオブジェクトを描き、次に次のレイヤーを描きます。これは非常に高速です (挿入プロンプトなどでこれを行う本格的なワープロを作成しました)。