Учитывая угол в градусах, как я могу найти логику для линии перемещения, используя x и y? (Математическая дилемма) - PullRequest
5 голосов
/ 15 февраля 2011

Я делаю простую игру на HTML5 canvas, она включает в себя вождение маленькой машины.

Стрелка вверх перемещает автомобиль, стрелка влево и вправо направляет его.

У меня есть сортировка по вращению, но теперь она должна перемещать свои позиции x и y при удерживании клавиши вверх, основываясь на том, под каким углом она находится.

Пример:

Угол равен 0, стрелка вверх влияет только на координату y.

Угол 45, стрелка вверх будет влиять на координаты x и y в одинаковом темпе.

Какую логику я могу использовать, если угол, скажем, 32?

Ответы [ 2 ]

11 голосов
/ 15 февраля 2011

Вы можете попробовать что-то вроде этого

   velY = Math.cos(angle * Math.PI / 180) * thrust;
   velX = Math.sin(angle * Math.PI / 180) * thrust;

    x += velX;
    y -= velY;

Быстрый пример, угол просто увеличивается каждый цикл.

http://jsfiddle.net/j5U5h/5/

Угол 0 вверх, как у васв вашем первоначальном вопросе.

Вот модификация jsfiddle, поэтому угол 0 перемещает вас вправо.

http://jsfiddle.net/j5U5h/7/

 velX = Math.cos(angle * Math.PI / 180) * thrust;
 velY = Math.sin(angle * Math.PI / 180) * thrust;

 x += velX;
 y += velY;

Чтобы заставить 0 перейти кправо изначально поменяю на

1018 *
1 голос
/ 15 февраля 2011

Вы действительно имели в виду, что 90 перемещает обе оси одинаково? Мне кажется, что должно быть 45 ходов в обоих направлениях одинаково.

если 45 перемещает обе оси одинаково:

xfactor = angle * (1/90)
yfactor = (90 - angle) * (1/90)

xpos = xpos + (xincrement * xfactor)
ypos = ypos + (yincrement * yfactor)

если 90 перемещает обе оси одинаково:

xfactor = (2 * angle) * (1/180)
yfactor = (180 - (2 * angle)) * (1/180)

xpos = xpos + (xincrement * xfactor)
ypos = ypos + (yincrement * yfactor)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...