Войти
ПрограммированиеФорумОбщее

Как реализовать разные типы поверхностей под игроком?

Страницы: 1 2 Следующая »
#0
13:45, 12 ноя. 2019

Хочу добавить в игру песок, асфальт, траву и т.п.

И это все должно влиять на скорость передвижения игрока. Сейчас я просто устанавливаю определенную скорость в нужном направлении. Но вот как определить, что клетка под нами это например песок и нужно двигаться медленнее? Т.е. определить то не проблема, но что делать, если мы строго между двумя клетками (принадлежность к клетке определяю принадлежностью центра объекта к ней)? А если клетка, например, стена и в нее вообще нельзя переходить? Сейчас у меня игрок половиной спрайта наезжает на стены.


#1
13:57, 12 ноя. 2019

if (tile == GRASS) {
    speed = 4;
}
else
if (tile == SAND) {
    speed = 2;
}
else
if (tile == ROAD) {
    speed = 6;
}

#2
15:54, 12 ноя. 2019
switch (tile)
{
  case GRASS:
    speed = 4;
    break;
  case SAND:
    speed = 2;
    break;
  case ROAD:
    speed = 6;
    break;
}
#3
(Правка: 16:02) 16:00, 12 ноя. 2019

Думаю производительней будет, если ассоциативность скорости к типу поверхности сделать на уровне обращения по индексу типа поверхности к массиву скоростей.

speeds = {4, 2, 6};

speed = speeds[tiletype];

Robotex
> Но вот как определить, что клетка под нами это например песок и нужно двигаться
> медленнее?
Видимо тут как раз и будет то, что у тебя каждая клетка содержит тип поверхности - карта.

#4
16:12, 12 ноя. 2019

В физ движке проверять столкновение игрока с поверхностью и в зависимости от этого проигрывать звук и добавлять кэффициенты на скорость перемещения и тд

#5
16:12, 12 ноя. 2019

nes
не плохо, но break лишним мусором смотрится

foxes
> speed = speeds[tiletype];
не масштабируемо, если надо еще какие условия добавить
по мимо присвоения скорости

#6
17:11, 12 ноя. 2019

/A\
А если танк стоит на границе четырёх разных поверхностей?

forwhile
nes
До этого я и сам могу додуматься. Как понять какая именно поверхность под нами, когда их много одновременно?

#7
17:13, 12 ноя. 2019

Robotex
> А если танк стоит на границе четырёх разных поверхностей?
У него много-много катков, вот для каждого обрабатываешь. Либо берешь что-то одно, от колес не так много звуков.

#8
17:15, 12 ноя. 2019

Это разве не солвер решает? посмотри как в бох2д сделан фрикшн

#9
17:32, 12 ноя. 2019

/A\
У него нет катков. Он просто двумерный круг

#10
17:33, 12 ноя. 2019

lookid
Солвер только перемещает объекты и оповещает о коллизиях

#11
(Правка: 17:36) 17:36, 12 ноя. 2019

Robotex
Вляпался в траву, идёшь со скоростью x1. Вляпался в песок, идёшь со скоростью x0.5. Вляпался в дорогу, идёшь со скоростью x2. Вляпался и в песок и в дорогу - идёшь со скоростью x0.5*x2=x1.

#12
17:58, 12 ноя. 2019

Robotex
Нет, алё, Миртичи-Баррафы? Солвер апплаит импульзы в зависимости от параметров контакта. Там есть и трение.

#13
18:38, 12 ноя. 2019

forwhile
> не масштабируемо, если надо еще какие условия добавить
> по мимо присвоения скорости
Интерфейс виртуальных функций.

speeds[tiletype].get(data);
Robotex
> У него нет катков. Он просто двумерный круг
Интерполяцией. На сетке проще, между 4 значениями, на графе/меше берешь соседние узлы.
#14
18:44, 12 ноя. 2019

Robotex
>Как понять какая именно поверхность под нами, когда их много одновременно?
Взять ближайший тайл, на который попадает бокс игрока.

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее