Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带加速度的加速计-移动图像Windows Phone 8_C#_Windows Phone 8_Windows Phone_Accelerometer_Acceleration - Fatal编程技术网

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

在C#中为windows phone 8开发了一个非常简单的学习游戏,我创建了如下加速向量:

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只是一个用于存储位置/速度/加速度信息的对象。