私の Windows Phone 7 アプリケーションには、メインCanvas
コントロールのあるページがあります。サイズが 640x480 の5 つImage
のレイヤーが含まれており、ある程度の透明度があり、上下に積み重ねられています。
最初に、アプリケーションは加速度計からの情報を読み取り、X;Y;Z の更新ごとに画像を異なる位置に移動します。
Canvas.SetLeft(element, position)
とメソッドを使用して、次のCanvas.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 の更新が非常に遅いことです... オブジェクトは 1 秒に 1 回のように位置を変更します。間違った方法を実装しましたか? FPS を失わずに画像を頻繁に移動する正しい方法は何ですか? 本当に XNA に切り替える必要がありますか?