Audes
@Audes

Не работает 2D передвижение?

private double GetAngle(double x1,double y1,double x2,double y2)
        {
            double ang = Math.Atan((x1 - x2) / (y1 - y2)) * Rad2Deg;
            if ((x1 < x2) && (y1 > y2))
                return ang;
            else if (((x1 < x2) && (y1 < y2)) || ((x1 > x2) && (y1 < y2)))
                return ang + 180d;
            else
                return ang + 360d;
        }

        public void MoveTo(double x, double y)
        {
            TX = x; TY = y;
            Angle = GetAngle(TX, TY, X, Y);
            TimerMove.Interval = 10;
            TimerMove.Start();
        }

        private void Move(object sender, EventArgs e)
        {
            X += Speed * (Math.Sin(Angle * Rad2Deg));
            Y += Speed * (Math.Cos(Angle * Rad2Deg));
        }
  • Вопрос задан
  • 2281 просмотр
Решения вопроса 1
Mrrl
@Mrrl
Заводчик кардиганов
Если константа Rad2Deg определена, как 180/pi, то в функции Move надо не умножать на неё, а делить.
И вообще, неплохо бы хотя бы кратко описывать - что хотите получить, а что получается.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Чет мне подсказывает, что у вас нет mainloop-а, где все это работает или он есть, но функции там не вызываются. А вас есть mainloop("главный цикл где обрабатываются все изменения ")?

TimerMove.Interval = 10;
TimerMove.Start();

Если я правильно воспользовался ясновидением, то у вас будет небольшой сдвиг через 10 секунд, а потом все закончиться...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы