Пример #1
0
        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();
        }
Пример #2
0
        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;
        }
Пример #3
0
        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);
        }