下面的代码从物理引擎中获取对象的所有位置和角度,并相应地更新每个对象。一旦对象之间有大量活动,它就会减慢。
我知道它不是物理引擎,因为我使用 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 会更好吗?