6.07.2015 / 20:53 | |
Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| ОписаниеВ этой теме делимся алгоритмами/советами, помогаем юзерам и анализируем игры, на предмет того, как примерно могут работать алгоритмы в той или иной игре. Правила- чётко формулируем вопросы, указываем язык программирования, платформу и какой нужен алгоритм - не унижаем юзеров за их нубство - ведём беседу больше по делу - длинный код упаковываем в спойлер - за оказанную помощь ставим плюс в карму Статьи• Как создавать игры жанра 2d платформер?• Обзор физики в играх Sonic• Базовые алгоритмы определения столкновений• Ностальгия: роемся у «Танчиков» под капотом• Алгоритм поведения привидений в игре Pac-Man• Алгоритм построения пути в стратегической игре• Псевдо 3D в Diablo (eng)Книги• Procedural Content Generation in Games (англ.) — процедурная генерация, Изменено aRiGaTo (17.09 / 19:55) (всего 14 раз) |
6.07.2015 / 21:49 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Интересно как работает разрушение в Worms (J2ME), а также столкновения. Теоретически можно разбить всю карту на разные прямлугольники, минимизировав их количесво каким-то алгоритмом, а в месте разрушений, кривых делать попиксельно, но думаю все равно тормозило бы так..
|
6.07.2015 / 22:06 | |
Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| Вот пример скроллинга, у кого есть свои реализации скроллинга, не стесняемся, делимся Открыть спойлер Закрыть спойлер // размеры экрана
int w, h;
// координаты игрока
int x, y;
// размеры спрайта
int player_w, player_h;
// координаты игровой карты
int map_x, map_y;
// размеры игровой карты в пикселях
int level_w, level_h;
public void move(int dx, int dy)
{
x+=dx;
y+=dy;
if (x<0)
x=0;
else
if (x>level_w-player_w)
x=level_w-player_w;
if (y<0)
y=0;
else
if (y>level_h-player_h)
y=level_h-player_h;
map_x=-(x+player_w/2-w/2);
map_y=-(y+player_h/2-h/2);
if (map_x>0)
map_x=0;
else if (map_x<w-level_w)
map_x=w-level_w;
if (map_y>0)
map_y=0;
else if (map_y<h-level_h)
map_y=h-level_h;
map.setPosition(map_x, map_y);
player.setPosition(x+map_x, y+map_y);
// передвигаем все объекты, итемы, мобов и так далее
mobs.setPosition(mob_x+map_x, mob_y+map_y);
}
|
6.07.2015 / 22:14 | |
AHiLLA Пользователь Сейчас: Offline
Имя: Али Откуда: Махачкала Регистрация: 19.01.2010
| Могу дать код пули, если кому надо |
6.07.2015 / 22:35 | |
Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| AHiLLA, Брат, пулю можно вызывать как моба Naik, У меня на сега есть Worms, на счёт столкновений там тупо по сетке проверять можно, за один кадр всего три клетки проверяешь и анимация воды, и всё, по этой причине особо тормозить не должно всё уходит на отрисовку, только есть один нюанс, как же построен мир? Задний фон, уж точно это тайлы, а сам ландшафт вот это вопрос |
6.07.2015 / 23:01 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Magatino, там же не по клеткам, там сложный ландшафт. Думаю можно разбить на 3 типа клеток - земля, воздух, и смешанная. Земля и воздух проверять просто по клеткам как ты говоришь, а там где в клетку попадает и то и другое придётся попиксельно.
По другому можно разве что все проверять, считать формулами, кривыми, но это кажется сложно реализовать. Но зато придется только пройти по всем функциям и посмотреть где спрайт, если пересекает одну из функций, то все, столкновение.
|
6.07.2015 / 23:03 | |
Korvin Пользователь Сейчас: Offline
Имя: Макс Откуда: Белгород Регистрация: 06.04.2011
| Цитата Naik: Интересно как работает разрушение в Worms (J2ME), а также столкновения. Теоретически можно разбить всю карту на разные прямлугольники, минимизировав их количесво каким-то алгоритмом, а в месте разрушений,Мне тоже очень интересно, надо подумать.
|
6.07.2015 / 23:17 | |
Korvin Пользователь Сейчас: Offline
Имя: Макс Откуда: Белгород Регистрация: 06.04.2011
| Возможно разрушаемый фон это одна цельная текстура , после попадания например ракеты высчитывается область которую нужно уничтожить потом к текстуре применяется метод типа setPixsel и пиксели которые нужно уничтожить просто закрашиваются цветом фона или становятся прозрачными .В итоге всегда рендерится только один спрайт, ну не считая червей ракет и тд. А по поводу столкновений есть метод столкновений двух спрайтов с учетом альфа канала.
|
6.07.2015 / 23:24 | |
Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| Korvin, Слишком затратно для Сеги выводить такую пикчу, тем более длина уровней примерно в четыре экрана |
6.07.2015 / 23:37 | |
vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| __________________
знает толк |