C# 带加速度的加速计-移动图像Windows Phone 8
在C#中为windows phone 8开发了一个非常简单的学习游戏,我创建了如下加速向量:C# 带加速度的加速计-移动图像Windows Phone 8,c#,windows-phone-8,windows-phone,accelerometer,acceleration,C#,Windows Phone 8,Windows Phone,Accelerometer,Acceleration,在C#中为windows phone 8开发了一个非常简单的学习游戏,我创建了如下加速向量: Vector3 acceleration = accelerometerReading.Acceleration; Canvas.SetTop(myControl,XPosition); Canvas.SetLeft(myControl,YPosition); 我不能做像这样的事情: mycontrol.Xacceleration = mycontrol.Xacceleration + accele
Vector3 acceleration = accelerometerReading.Acceleration;
Canvas.SetTop(myControl,XPosition);
Canvas.SetLeft(myControl,YPosition);
我不能做像这样的事情:
mycontrol.Xacceleration = mycontrol.Xacceleration + acceleration.X * 200;
如何将加速度应用于图像,我找不到任何坐标系或加速度特性。我试图移动一个图像,就像在迷宫游戏中一样,我如何通过加速来实现这一点?我如何应用它
谢谢你的帮助 如果你想制作一个带有移动对象的游戏,你应该考虑使用XNA或Unity这样的游戏引擎,因为C#/XAML的性能不好。
如果您真的想使用C#/xaml,您需要自己计算图像控件的位置。要设置位置,您可以将图像放在画布中,并按如下方式设置位置:
Vector3 acceleration = accelerometerReading.Acceleration;
Canvas.SetTop(myControl,XPosition);
Canvas.SetLeft(myControl,YPosition);
您也可以使用故事板来设置对象的动画,但如果加速度和方向不断变化,则可能会更加复杂
要利用硬件加速,需要在移动对象上设置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>
您将需要使用RefreshTimeMilisond参数来找出最有效的方法如果您想制作一个带有移动对象的游戏,您应该考虑使用XNA或Unity之类的游戏引擎,因为C#/XAML的性能将不好。
如果您真的想使用C#/xaml,您需要自己计算图像控件的位置。要设置位置,您可以将图像放在画布中,并按如下方式设置位置:
Vector3 acceleration = accelerometerReading.Acceleration;
Canvas.SetTop(myControl,XPosition);
Canvas.SetLeft(myControl,YPosition);
您也可以使用故事板来设置对象的动画,但如果加速度和方向不断变化,则可能会更加复杂
要利用硬件加速,需要在移动对象上设置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>
您将需要使用RefreshTimeMilisond参数来找出最佳工作方式我将尝试使其工作,但如何将加速度转换为坐标?我可以使用xna或类似的东西,只是我不喜欢只使用代码和代码开发,我也喜欢一些图形设计——unity pro现在非常昂贵。更新了我的回复,让您开始了解如何计算位置。噢,非常感谢!我要花点时间弄清楚这件事,试着让一切正常运转。再次感谢:)@BenoitCatherinet您能详细解释一下您的答案吗。我正在尝试为wp8游戏实现同样的目标。我有一个笑脸在屏幕中部,我想使用加速器数据移动。我对myControl、Canvas.SetTop和myObject感到困惑。非常感谢。添加了xaml代码来定义myControl。myObject只是一个用于存储位置/速度/加速度信息的对象。我会尝试让它工作,但如何将加速度转换为坐标?我可以使用xna或类似的东西,只是我不喜欢只使用代码和代码开发,我也喜欢一些图形设计——unity pro现在非常昂贵。更新了我的回复,让您开始了解如何计算位置。噢,非常感谢!我要花点时间弄清楚这件事,试着让一切正常运转。再次感谢:)@BenoitCatherinet您能详细解释一下您的答案吗。我正在尝试为wp8游戏实现同样的目标。我有一个笑脸在屏幕中部,我想使用加速器数据移动。我对myControl、Canvas.SetTop和myObject感到困惑。非常感谢。添加了xaml代码来定义myControl。myObject只是一个用于存储位置/速度/加速度信息的对象。