Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.08.2013, 11:17
Аватар для Murdoc
Аспирант
Отправить личное сообщение для Murdoc Посмотреть профиль Найти все сообщения от Murdoc
 
Регистрация: 04.05.2013
Сообщений: 45

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


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

Последний раз редактировалось Murdoc, 31.08.2013 в 11:24.
Ответить с цитированием
  #2 (permalink)  
Старый 31.08.2013, 13:36
Профессор
Отправить личное сообщение для mta88 Посмотреть профиль Найти все сообщения от mta88
 
Регистрация: 16.05.2013
Сообщений: 229

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

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

Цитата:
Также если есть какой-то материал по написанию 2D игр - поделитесь!
эти тайны передаются только от отца к сыну или внутри тайных обществ
конечно же никто не поделится
Ответить с цитированием
  #3 (permalink)  
Старый 31.08.2013, 15:56
Аватар для Murdoc
Аспирант
Отправить личное сообщение для Murdoc Посмотреть профиль Найти все сообщения от Murdoc
 
Регистрация: 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;



Как заставить объект двигаться вбок?
Ответить с цитированием
  #4 (permalink)  
Старый 31.08.2013, 16:25
Профессор
Отправить личное сообщение для mta88 Посмотреть профиль Найти все сообщения от mta88
 
Регистрация: 16.05.2013
Сообщений: 229

Цитата:
Как заставить объект двигаться вбок?
как вы будете делать игру, если на такой элементарной математике затык?
вместо "rotation" возьмите "rotation+90"
тогда последние два выражения передвинут объект вправо, а предпоследние два -- влево
Ответить с цитированием
  #5 (permalink)  
Старый 31.08.2013, 17:26
Аватар для Murdoc
Аспирант
Отправить личное сообщение для Murdoc Посмотреть профиль Найти все сообщения от Murdoc
 
Регистрация: 04.05.2013
Сообщений: 45

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

Последний раз редактировалось Murdoc, 31.08.2013 в 21:34.
Ответить с цитированием
  #6 (permalink)  
Старый 01.09.2013, 06:11
Аспирант
Посмотреть профиль Найти все сообщения от iLikeMaxmaxmaximus
 
Регистрация: 07.08.2013
Сообщений: 50

кто привязывает анимацию к фреймам а не ко времени? наркоманы штоле?
Ответить с цитированием
  #7 (permalink)  
Старый 08.09.2013, 01:10
Аватар для Murdoc
Аспирант
Отправить личное сообщение для Murdoc Посмотреть профиль Найти все сообщения от Murdoc
 
Регистрация: 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 в 02:33.
Ответить с цитированием
  #8 (permalink)  
Старый 10.09.2013, 15:35
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

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

X= r cos
Y= r sin
__________________
оляля, ололо
Ответить с цитированием
  #9 (permalink)  
Старый 09.11.2015, 19:09
Аватар для Stroy
Интересующийся
Отправить личное сообщение для Stroy Посмотреть профиль Найти все сообщения от Stroy
 
Регистрация: 29.10.2014
Сообщений: 25

Погуглите по запросу "тригонометрия". Насколько я помню, это самые основы.
Ответить с цитированием
  #10 (permalink)  
Старый 09.11.2015, 21:56
Аспирант
Отправить личное сообщение для dalmatian Посмотреть профиль Найти все сообщения от dalmatian
 
Регистрация: 01.11.2015
Сообщений: 91

Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск