在我的 Windows Phone 7 应用程序中有一个带有主Canvas
控件的页面。它包含 5Image
层,大小为 640x480 和一些透明度,一层堆叠在另一层之上。
开始时,应用程序读取来自加速度计的信息,并在每次 X;Y;Z 更新时将图像移动到不同的位置。
我使用Canvas.SetLeft(element, position)
andCanvas.SetTop(element, position)
方法分别移动每一层,如下所示:
void accelSensor_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e)
{
accelReading.X = (float)e.SensorReading.Acceleration.X;
accelReading.Y = (float)e.SensorReading.Acceleration.Y;
accelReading.Z = (float)e.SensorReading.Acceleration.Z;
/* do some math... */
this.Dispatcher.BeginInvoke(delegate()
{
for (var i = 0; i < MainCanvas.Children.Count; i++)
{
Canvas.SetLeft(MainCanvas.Children[i], /* some value... */));
Canvas.SetTop(MainCanvas.Children[i], /* some value... */));
}
});
}
问题是 GUI 的更新非常缓慢……对象每秒改变一次位置。我是否实施了错误的方法?在不丢失 FPS 的情况下经常移动图像的正确方法是什么?我真的需要切换到 XNA 吗?