private Point mouseOffset; // 鼠标指针与被拖图片位置间的偏差值 /// <summary> /// 对一个RigidbodyUC进行注册,使之能够被拖动、右键旋转 /// </summary> /// <param name="rigidbodyUC"></param> public void Register(RigidbodyUC rigidbodyUC) { rigidbodyUC.MouseLeftButtonDown += (o1, e1) => { e1.Handled = true; draged = (o1 as RigidbodyUC); mouseOffset = e1.GetPosition(draged); lastPosition = draged.TranslatePoint(new Point(0, 0), SceneUC); if (draged.Parent == SceneUC.MainCanvas) { SceneUC.RemoveRigidbodyUC(draged); MainGrid.Children.Add(draged); } draged.SetValue(Panel.ZIndexProperty, 5); }; rigidbodyUC.MouseRightButtonDown += (o1, e1) => (o1 as RigidbodyUC).Rigidbody.Rotate(); }
private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (draged == null) { return; } draged.SetValue(Panel.ZIndexProperty, 0); var pos = draged.TranslatePoint(new Point(0, 0), SceneUC); MainGrid.Children.Remove(draged); draged.Rigidbody.Position = new Vector2((int)(pos.X / SceneUC.BlockWidth + 0.5), (int)(pos.Y / SceneUC.BlockHeight + 0.5)); if (SceneUC.AddRigidbodyUC(draged) == false) { draged.Rigidbody.Position = new Vector2((int)(lastPosition.X / SceneUC.BlockWidth + 0.5), (int)(lastPosition.Y / SceneUC.BlockHeight + 0.5)); SceneUC.AddRigidbodyUC(draged); } draged = null; }
private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { e.Handled = true; Image shape = sender as Image; if (shape == null) { return; } if (InputSize == null) { MessageBox.Show("尺寸参数不合法"); return; } Vector2 inputSize = InputSize.Value; // 在原图的位置生成一个障碍UC var position = shape.TranslatePoint(new Point(0, 0), MainGrid); RigidbodyUC obstacle = new RigidbodyUC(); switch (shape.Name) { case "BallImage": if (SceneUC.Scene.Ball != null) { return; } obstacle.Rigidbody = new Ball() { Size = new Vector2(1, 1), }; break; case "FlipperImage": if (SceneUC.Scene.Flipper != null) { return; } obstacle.Rigidbody = new Flipper() { Size = inputSize, }; break; case "DestroyerImage": obstacle.Rigidbody = new Destroyer() { Size = inputSize, }; break; case "RectangleImage": obstacle.Rigidbody = new Physics.Rectangle() { Size = inputSize, }; break; case "TriangleImage": obstacle.Rigidbody = new Triangle() { Size = inputSize, }; break; case "CircleImage": obstacle.Rigidbody = new Circle() { Size = inputSize, }; break; default: return; } obstacle.Height = SceneUC.BlockHeight * obstacle.Rigidbody.Size.y; obstacle.Width = SceneUC.BlockWidth * obstacle.Rigidbody.Size.x; obstacle.HorizontalAlignment = HorizontalAlignment.Left; obstacle.VerticalAlignment = VerticalAlignment.Top; obstacle.Margin = new Thickness(position.X, position.Y, 0, 0); MainGrid.Children.Add(obstacle); // 实现拖动功能 // 拖动时父对象为MainGrid // 拖动后若坐标合法则父对象为SceneUC.MainCanvas // 不合法则删除 draged = obstacle; lastPosition = obstacle.TranslatePoint(new Point(0, 0), SceneUC); mouseOffset = new Point(obstacle.Width / 2, obstacle.Height / 2); Register(obstacle); }