Как синхронизировать стрелу с баллистой

Рейтинг: 1Ответов: 1Опубликовано: 29.04.2023

У меня есть стрела на баллисте и возможность делать вверх вниз эту направляющую:

в обычном состоянии

Но я все не могу никак её синхронизировать с направляющей:

введите сюда описание изображения

Подскажите, пожалуйста, какие тут формулы можно использовать или как это реализовать.

Вот код, относящийся ко всему этому:

protected Image Arrow = new Image();
public Image Arrowkeeper = new Image();

RotateTransformArrow.Angle = 0;
RotateTransformArrowkeeper.Angle = 0;

Ballista_Canvas.Children.Add(Arrow);
Ballista_Canvas.Children.Add(Arrowkeeper);

Canvas.SetTop(Arrow, 617);
Canvas.SetLeft(Arrow, 1214);
Arrow.Width = 240;
Arrow.Height = 204;

Canvas.SetTop(Arrowkeeper, 635);
Canvas.SetLeft(Arrowkeeper, 1264);
Arrowkeeper.Width = 262;
Arrowkeeper.Height = 220;

RotateTransformArrow.CenterX = 408;
RotateTransformArrow.CenterY = 168;

RotateTransformArrowkeeper.CenterX = Arrowkeeper.Width - (Arrowkeeper.Width * 70.9 / 100);
RotateTransformArrowkeeper.CenterY = Arrowkeeper.Height - (Arrowkeeper.Height * 70 / 100);

bool arrowIsMovingUp = false;
bool arrowIsMovingDown = false;

Arrow.Source = BitmapFrame.Create(new Uri(IAR, UriKind.RelativeOrAbsolute));
Arrowkeeper.Source = BitmapFrame.Create(new Uri(IARK, UriKind.RelativeOrAbsolute));

public void Move_Bow(object sender, EventArgs e)
    {
        if (arrowIsMovingUp)
        {
            if (RotateTransformArrowkeeper.Angle < 2)
            {
                RotateTransformArrow.Angle += 1;
                RotateTransformArrowkeeper.Angle += 1;
                Arrow.RenderTransform = RotateTransformArrow;
                Arrowkeeper.RenderTransform = RotateTransformArrowkeeper;
            }
        }
        else if (arrowIsMovingDown)
        {
            if (RotateTransformArrowkeeper.Angle > -55)
            {
                RotateTransformArrow.Angle -= 1;
                RotateTransformArrowkeeper.Angle -= 1;
                Arrow.RenderTransform = RotateTransformArrow;
                Arrowkeeper.RenderTransform = RotateTransformArrowkeeper;
            }
        }
    }
CompositionTarget.Rendering += mainballista.Move_Bow;

Ответы

▲ 2Принят

Вам требуется создать отдельный Canvas для стрелы и для балисты. И уже для этих созданных Canvas'ов задать необходимые числа:

Canvas.SetTop(Arrow, 617);
Canvas.SetLeft(Arrow, 1214);

В примере используются числа для примера, вам требуется самостоятельно рассчитать числа, т.к. у вас есть исходники изображений. Либо обратиться к художнику компании...