ポンポンハネる
XAMLは前回と一緒なので省略。
private double vx = 0; private double vy = 0; private double grabity = 1; private void UserControl_Loaded(object sender, RoutedEventArgs e) { var random = new Random(); vx = random.NextDouble() * -10d; vy = random.NextDouble() * -10d; CompositionTarget.Rendering += CompositionTarget_Rendering; } private void CompositionTarget_Rendering(object sender, EventArgs e) { if (Math.Abs(vx) < 0.00000001 && Math.Abs(vy) < 0.5) { var random = new Random(); vx = random.NextDouble() * -10d; vy = random.NextDouble() * -50d; } vy += grabity; target.SetValue(Canvas.LeftProperty, (double)target.GetValue(Canvas.LeftProperty) + vx); target.SetValue(Canvas.TopProperty, (double)target.GetValue(Canvas.TopProperty) + vy); if ((double)target.GetValue(Canvas.LeftProperty) + target.Width > area.Width) { target.SetValue(Canvas.LeftProperty, area.Width - target.Width); vx *= -1d; } if ((double)target.GetValue(Canvas.LeftProperty) - target.Width < 0) { target.SetValue(Canvas.LeftProperty, 0 + target.Width); vx *= -1d; } if ((double)target.GetValue(Canvas.TopProperty) + (target.Height) > area.Height) { target.SetValue(Canvas.TopProperty, area.Height - target.Height); //地面の摩擦 vx *= 0.95; //ボールの弾力 vy *= -1d; vy *= 0.9; } if ((double)target.GetValue(Canvas.TopProperty) - (target.Height) < 0) { target.SetValue(Canvas.TopProperty, 0 + target.Height); vy *= -1d; } }
ものすごい微妙。特に停止してるかどうかの判定がいけてない。
誰か、いけてる方法教えてください〜〜