Xaml 弹跳式加速度计

Xaml 弹跳式加速度计,xaml,animation,accelerometer,windows-phone,Xaml,Animation,Accelerometer,Windows Phone,我的Windows Phone页面上有一个矩形。当用户倾斜手机时,矩形的位置会根据倾斜角度发生变化(我使用TranslateTransform)。它很好用 像这样: void CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e) { // respond to the accelerometer on the UI thread Dispatcher

我的Windows Phone页面上有一个矩形。当用户倾斜手机时,矩形的位置会根据倾斜角度发生变化(我使用TranslateTransform)。它很好用

像这样:

void CurrentValueChanged(object sender,
    SensorReadingEventArgs<AccelerometerReading> e)
{
    // respond to the accelerometer on the UI thread
    Dispatcher.BeginInvoke(new Action(() =>
    {
        // left, right
        var _LeftDelta = e.SensorReading.Acceleration.X * 5d;
        var _NewLeft = m_Transform.X + _LeftDelta;
        var _PanelWidth = ContentPanel.RenderSize.Width;
        var _RectangleWidth = m_Rectangle.RenderSize.Width;
        if (_NewLeft > 0 && _NewLeft < _PanelWidth - _RectangleWidth)
            m_Transform.X = _NewLeft;

        // up, down
        var _RightDelta = e.SensorReading.Acceleration.Y * -5d;
        var _NewTop = m_Transform.Y + _RightDelta;
        var _PanelHeight = ContentPanel.RenderSize.Height;
        var _RectangleHeight = m_Rectangle.RenderSize.Height;
        if (_NewTop > 0 && _NewTop < _PanelHeight - _RectangleHeight)
            m_Transform.Y = _NewTop;
    }));
}
void CurrentValueChanged(对象发送方,
传感器读取事件参数(e)
{
//响应UI线程上的加速计
Dispatcher.BeginInvoke(新操作(()=>
{
//左,右
var _LeftDelta=e.传感器读数.加速度.X*5d;
var _NewLeft=m_Transform.X+_LeftDelta;
var _PanelWidth=ContentPanel.renderize.Width;
var _RectangleWidth=m_Rectangle.RenderSize.Width;
如果(_NewLeft>0&&u NewLeft<_PanelWidth-_RectangleWidth)
m_Transform.X=_NewLeft;
//上下
var _RightDelta=e.传感器读数.加速度.Y*-5d;
var _NewTop=m_Transform.Y+_rightdalta;
var _PanelHeight=ContentPanel.renderize.Height;
var _RectangleHeight=m_Rectangle.RenderSize.Height;
如果(_NewTop>0&&u NewTop<_PanelHeight-_RectangleHeight)
m_Transform.Y=_NewTop;
}));
}
不过,我想做的是在用户点击页面侧面时添加一个反弹


有人知道怎么做吗?

您当前的代码没有加速度和速度分开

应根据加速度更新速度,而不是根据加速度更新位置。

你的值5d代替了质量。它告诉你一个给定的力发生了多少变化

您需要为位置保留变量

x、 y

和速度

v_x,v_y

然后用

x <-  x+ v_x* step_size
y <-  y+ v_y* step_size

x您设法找到了两个相似的问题并同时回答了它们。谢谢你的意见。然而,你的解决方案并不是我希望你去的地方。我在寻找如何动态地应用缓和功能。
v_x <-  v_x + acceletation_x* 5d * step_size
v_y <-  v_y + acceletation_y* 5d * step_size
v_x <-  v_x * 0.95
v_y <-  v_y * 0.95