Хочу добавить в игру песок, асфальт, траву и т.п.
И это все должно влиять на скорость передвижения игрока. Сейчас я просто устанавливаю определенную скорость в нужном направлении. Но вот как определить, что клетка под нами это например песок и нужно двигаться медленнее? Т.е. определить то не проблема, но что делать, если мы строго между двумя клетками (принадлежность к клетке определяю принадлежностью центра объекта к ней)? А если клетка, например, стена и в нее вообще нельзя переходить? Сейчас у меня игрок половиной спрайта наезжает на стены.
if (tile == GRASS) {
speed = 4;
}
else
if (tile == SAND) {
speed = 2;
}
else
if (tile == ROAD) {
speed = 6;
}
switch (tile) { case GRASS: speed = 4; break; case SAND: speed = 2; break; case ROAD: speed = 6; break; }
Думаю производительней будет, если ассоциативность скорости к типу поверхности сделать на уровне обращения по индексу типа поверхности к массиву скоростей.
speeds = {4, 2, 6}; speed = speeds[tiletype];
Robotex
> Но вот как определить, что клетка под нами это например песок и нужно двигаться
> медленнее?
Видимо тут как раз и будет то, что у тебя каждая клетка содержит тип поверхности - карта.
В физ движке проверять столкновение игрока с поверхностью и в зависимости от этого проигрывать звук и добавлять кэффициенты на скорость перемещения и тд
nes
не плохо, но break лишним мусором смотрится
foxes
> speed = speeds[tiletype];
не масштабируемо, если надо еще какие условия добавить
по мимо присвоения скорости
/A\
А если танк стоит на границе четырёх разных поверхностей?
forwhile
nes
До этого я и сам могу додуматься. Как понять какая именно поверхность под нами, когда их много одновременно?
Robotex
> А если танк стоит на границе четырёх разных поверхностей?
У него много-много катков, вот для каждого обрабатываешь. Либо берешь что-то одно, от колес не так много звуков.
Это разве не солвер решает? посмотри как в бох2д сделан фрикшн
/A\
У него нет катков. Он просто двумерный круг
lookid
Солвер только перемещает объекты и оповещает о коллизиях
Robotex
Вляпался в траву, идёшь со скоростью x1. Вляпался в песок, идёшь со скоростью x0.5. Вляпался в дорогу, идёшь со скоростью x2. Вляпался и в песок и в дорогу - идёшь со скоростью x0.5*x2=x1.
Robotex
Нет, алё, Миртичи-Баррафы? Солвер апплаит импульзы в зависимости от параметров контакта. Там есть и трение.
forwhile
> не масштабируемо, если надо еще какие условия добавить
> по мимо присвоения скорости
Интерфейс виртуальных функций.
speeds[tiletype].get(data);
Robotex
>Как понять какая именно поверхность под нами, когда их много одновременно?
Взять ближайший тайл, на который попадает бокс игрока.
Тема в архиве.