|  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;elseif (x>level_w-player_w)x=level_w-player_w; if (y<0)y=0;elseif (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
 
 | __________________ 
   знает толк |