|
|

31.08.2013, 10:17
|
 |
Аспирант
|
|
Регистрация: 04.05.2013
Сообщений: 45
|
|
|
Математика в двухмерных играх (формулы)
Подскажите формулу для расчета вектора направления объекта в двухмерном пространстве, если известны координаты (x,y) и радиус наклона
Также если есть какой-то материал по написанию 2D игр - поделитесь!
Может есть какой модуль для node.js упрощающий расчеты в 2D играх (нужен не только вектор)
Последний раз редактировалось Murdoc, 31.08.2013 в 10:24.
|
|

31.08.2013, 12:36
|
|
Профессор
|
|
Регистрация: 16.05.2013
Сообщений: 229
|
|
это что ? o_O
даже если заменить "радиус" на "угол", предложение все-равно не понятно
|
Цитата:
|
|
Также если есть какой-то материал по написанию 2D игр - поделитесь!
|
эти тайны передаются только от отца к сыну или внутри тайных обществ
конечно же никто не поделится 
|
|

31.08.2013, 14:56
|
 |
Аспирант
|
|
Регистрация: 04.05.2013
Сообщений: 45
|
|
Сообщение от mta88
|
|
даже если заменить "радиус" на "угол", предложение все-равно не понятно
|
то есть да,
угол, под которым находится объект (если быть точнее, то угол под которым будет выстраиваться движение объекта)
У меня есть формулы на движение вперед-назад:
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;
Как заставить объект двигаться вбок?
|
|

31.08.2013, 15:25
|
|
Профессор
|
|
Регистрация: 16.05.2013
Сообщений: 229
|
|
|
Цитата:
|
|
Как заставить объект двигаться вбок?
|
как вы будете делать игру, если на такой элементарной математике затык?
вместо "rotation" возьмите "rotation+90"
тогда последние два выражения передвинут объект вправо, а предпоследние два -- влево
|
|

31.08.2013, 16:26
|
 |
Аспирант
|
|
Регистрация: 04.05.2013
Сообщений: 45
|
|
|
я не особо в линейной алгебре. Я и написал выше, если есть какой материал (ссылки) или на какую тему погуглить напишите.
Последний раз редактировалось Murdoc, 31.08.2013 в 20:34.
|
|

01.09.2013, 05:11
|
|
Аспирант
|
|
Регистрация: 07.08.2013
Сообщений: 50
|
|
|
кто привязывает анимацию к фреймам а не ко времени? наркоманы штоле?
|
|

08.09.2013, 00:10
|
 |
Аспирант
|
|
Регистрация: 04.05.2013
Сообщений: 45
|
|
Сообщение от Дзен-трансгуманист
|
Ну, во-первых, за игрек отвечает синус, за икс - косинус. У жителей сириуса может и наоборот, но у нас тут такие правила.
|
а как же тогда должны выглядеть формулы? как ни пытался не смог разобраться. Те формулы что я написал, были взяты из исходников другой игры
|
Сообщение от Дзен-трансгуманист
|
Во-вторых, угадай, к чему приведет floor на единичном векторе, тем более, что он ассиметричен относительно нуля?
Если у тебя целочисленное поле координат, то сначала нужно умножать значение функции на длину вектора - затем округлять.
И так как округлять тут, исходя из логики симметрии, надо по модулю, то обычно это решается так:
value = value < 0 ? Math.ceil( value ) : Math.floor( value )
А для чисел в диапазоне [-2³¹, 2³¹-1] даже проще:
value |= 0
|
решил вообще не округлять на сервере. Только перед самой отправкой на клиент пропускаю через Math.round().
Последний раз редактировалось Murdoc, 08.09.2013 в 01:33.
|
|

10.09.2013, 14:35
|
 |
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
|
Читай про единичную окружность, про проекции векторов на оси
X= r cos
Y= r sin
__________________
оляля, ололо
|
|

09.11.2015, 18:09
|
 |
Интересующийся
|
|
Регистрация: 29.10.2014
Сообщений: 25
|
|
|
Погуглите по запросу "тригонометрия". Насколько я помню, это самые основы.
|
|

09.11.2015, 20:56
|
|
Аспирант
|
|
Регистрация: 01.11.2015
Сообщений: 91
|
|
|
|
|
|
|