在C#中为Windows Phone 8开发一款非常简单的学习游戏,我创建了一个这样的加速度矢量:
Vector3 acceleration = accelerometerReading.Acceleration;
我不能做任何事情:
mycontrol.Xacceleration = mycontrol.Xacceleration + acceleration.X * 200;
如何将加速度应用于图像,我找不到任何坐标或加速属性。我试图移动图像,就像在迷宫游戏中一样,我怎样才能通过加速来实现这一目标?我该如何申请?
感谢您的帮助!
答案 0 :(得分:1)
如果你想制作一个有移动物体的游戏,你应该考虑使用XNA或像Unity这样的游戏引擎,因为C#/ XAML的性能不会很好。
如果你真的想使用C#/ xaml,你需要自己计算图像控件的位置。要设置位置,您可以将图像放在Canvas中并设置如下位置:
Canvas.SetTop(myControl,XPosition);
Canvas.SetLeft(myControl,YPosition);
您也可以使用StoryBoard为对象设置动画,但如果加速度和方向不断变化,它可能会更复杂
要利用硬件加速,您需要在移动对象上设置CacheMode =“BitmapCache”。
以下是计算对象位置的一些代码:
public class ObjectInfo
{
public Vector2 Position { get; set; }
public Vector2 Speed { get; set; }
public Vector2 Acceleration { get; set; }
}
private DispatcherTimer dispatcherTimer;
private int refreshTimeMilisecond = 100;
private ObjectInfo myObject;
public void Init()
{
myObject = new ObjectInfo();
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = TimeSpan.FromMilliseconds(refreshTimeMilisecond);
dispatcherTimer.Tick += dispatcherTimer_Tick;
}
void dispatcherTimer_Tick(object sender, EventArgs e)
{
myObject.Position = myObject.Position + myObject.Speed*refreshTimeMilisecond;
myObject.Speed = myObject.Speed + myObject.Acceleration * refreshTimeMilisecond;
Canvas.SetTop(myControl, myObject.Position.X);
Canvas.SetLeft(myControl, myObject.Position.Y);
}
在xaml:
<Canvas>
<Image x:Name="myControl" CacheMode="BitmapCache" Source="SmyleyImagePath"/>
</Canvas>
您需要使用refreshTimeMilisecond参数来找出最佳工作