Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Математика в двухмерных играх (формулы) (https://javascript.ru/forum/offtopic/41102-matematika-v-dvukhmernykh-igrakh-formuly.html)

Murdoc 31.08.2013 11:17

Математика в двухмерных играх (формулы)
 
Подскажите формулу для расчета вектора направления объекта в двухмерном пространстве, если известны координаты (x,y) и радиус наклона


Также если есть какой-то материал по написанию 2D игр - поделитесь!
Может есть какой модуль для node.js упрощающий расчеты в 2D играх (нужен не только вектор)

mta88 31.08.2013 13:36

Цитата:

радиус наклона
это что ? o_O

даже если заменить "радиус" на "угол", предложение все-равно не понятно

Цитата:

Также если есть какой-то материал по написанию 2D игр - поделитесь!
эти тайны передаются только от отца к сыну или внутри тайных обществ
конечно же никто не поделится :no:

Murdoc 31.08.2013 15:56

Цитата:

Сообщение от mta88 (Сообщение 270197)
даже если заменить "радиус" на "угол", предложение все-равно не понятно

то есть да,
угол, под которым находится объект (если быть точнее, то угол под которым будет выстраиваться движение объекта)


У меня есть формулы на движение вперед-назад:

var rotation = 40; // тот самый угол

//  по x
vX = Math.floor(Math.sin(rotation * (Math.PI / - 180));
// по y
vY = Math.floor(Math.cos(rotation * (Math.PI / - 180));

// Движение вперед:
elem.x += vX;
elem.y += vY;

// Движение назад:
elem.x -= vX;
elem.y -= vY;



Как заставить объект двигаться вбок?

mta88 31.08.2013 16:25

Цитата:

Как заставить объект двигаться вбок?
как вы будете делать игру, если на такой элементарной математике затык?
вместо "rotation" возьмите "rotation+90"
тогда последние два выражения передвинут объект вправо, а предпоследние два -- влево

Murdoc 31.08.2013 17:26

я не особо в линейной алгебре. Я и написал выше, если есть какой материал (ссылки) или на какую тему погуглить напишите.

iLikeMaxmaxmaximus 01.09.2013 06:11

кто привязывает анимацию к фреймам а не ко времени? наркоманы штоле?

Murdoc 08.09.2013 01:10

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 270276)
Ну, во-первых, за игрек отвечает синус, за икс - косинус. У жителей сириуса может и наоборот, но у нас тут такие правила. :)


а как же тогда должны выглядеть формулы? как ни пытался не смог разобраться. Те формулы что я написал, были взяты из исходников другой игры

Цитата:

Сообщение от Дзен-трансгуманист
Во-вторых, угадай, к чему приведет floor на единичном векторе, тем более, что он ассиметричен относительно нуля?

Если у тебя целочисленное поле координат, то сначала нужно умножать значение функции на длину вектора - затем округлять.
И так как округлять тут, исходя из логики симметрии, надо по модулю, то обычно это решается так:
value = value < 0 ? Math.ceil( value ) : Math.floor( value )

А для чисел в диапазоне [-2³¹, 2³¹-1] даже проще:
value |= 0


решил вообще не округлять на сервере. Только перед самой отправкой на клиент пропускаю через Math.round().

9xakep 10.09.2013 15:35

Читай про единичную окружность, про проекции векторов на оси

X= r cos
Y= r sin

Stroy 09.11.2015 19:09

Погуглите по запросу "тригонометрия". Насколько я помню, это самые основы.

dalmatian 09.11.2015 21:56



Часовой пояс GMT +3, время: 19:31.