以下のコードは、物理エンジンからオブジェクトのすべての位置と角度を取得し、それに応じて各オブジェクトを更新します。オブジェクト間に多くのアクティビティがあると、速度が低下します。
OpenGLを使用して作成したものとまったく同じものがあるため、物理エンジンではないことはわかっていますが、特定のアプリケーションには使用できません。
int bodyId = 0;
foreach (Shape shape in shapes)
{
//Don't update sleeping objects because they are sleeping.
//Waking them up would be terrible...
//IGNORE THEM AT ALL COSTS!!
if (physics.IsSleeping(bodyId))
{
++bodyId;
continue;
}
//Rotate transform
RotateTransform rot = new RotateTransform(physics.GetAngle(bodyId));
rot.CenterX = shape.Width / 2;
rot.CenterY = shape.Height / 2;
//Set the shape to rotate
shape.RenderTransform = rot;
//Body position
Point bodyPos = physics.GetPosition(bodyId);
Canvas.SetLeft(shape, bodyPos.X - shape.Width / 2);
Canvas.SetTop(shape, bodyPos.Y - shape.Height / 2);
++bodyId;
}
上記を行うためのより効率的な方法があるかどうかを知りたいのですが、いくつかの質問に分けてください。
Canvas.SetLeftとCanvas.SetTopを呼び出すと、UIがループ内でレンダリングを開始する時間はありますか?または、それが明確でない場合、Canvas.SetLeft関数とCanvas.SetTop関数はどのように正確に機能しますか?
すでにRotateTransformを使用しているので、TranslateTransformを使用する方がよいでしょうか?