[Урок]Генератор карт для платформера
| |
PolarBear | Дата: Понедельник, 18 Августа 2014, 21:10 | Сообщение # 21 |
был не раз
Сейчас нет на сайте
| Найти и нейтрализовать утечки памяти - тоже часть домашнего задания? Процессор неплохо так жгёт, причём в нон-стоп режиме. Работает, да.
|
|
| |
Saitei | Дата: Понедельник, 18 Августа 2014, 21:13 | Сообщение # 22 |
старожил
Сейчас нет на сайте
| Цитата PolarBear ( ) Найти и нейтрализовать утечки памяти - тоже часть домашнего задания? Процессор неплохо так жгёт, причём в нон-стоп режиме. Работает, да. Тсс... Не пали контору : ) Есть небольшой секрет. Сделай Sleep(1); в главном цикле. Это всего лишь 1 мс, но она значительно уменьшит нагрузку. P.S. Не забудь подключить Windows.h
|
|
| |
vasua99 | Дата: Вторник, 19 Августа 2014, 13:06 | Сообщение # 23 |
GNU follower
Сейчас нет на сайте
| Цитата Saitei ( ) Есть небольшой секрет. Сделай Sleep(1); в главном цикле. Это всего лишь 1 мс, но она значительно уменьшит нагрузку. Да можно даже и по 2 мс. А если фпс начнет проседать ниже 60 кадров, то делать по 1 мс)
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
Xakep | Дата: Пятница, 22 Августа 2014, 15:15 | Сообщение # 24 |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата Saitei ( ) Я понятия не имею, как генерировать карты с помощью шумов Перлина. Поэтому если кто-то знает как такое сделать - пожалуйста, поделитесь опытом. шум-перлина - это по сути просто функция, такая же как и синусоида и косинусоида, параболоида итд. А по функции уже построить мир не такая уж и проблема я думаю, главное разобраться в самом шуме перлина, на хабре есть отличная статья: link
|
|
| |
arlaid | Дата: Воскресенье, 24 Августа 2014, 12:31 | Сообщение # 25 |
частый гость
Сейчас нет на сайте
| Отличный урок! Все хочу начать заниматься C++, вот и вдохновился этой статьей посмотрев на код
Сообщение отредактировал arlaid - Воскресенье, 24 Августа 2014, 12:31 |
|
| |
goldsphere | Дата: Воскресенье, 24 Августа 2014, 13:16 | Сообщение # 26 |
заслуженный участник
Сейчас нет на сайте
| arlaid, хотеть мало, надо заниматься
FinderX - Android Аркада
|
|
| |
vladkomarr | Дата: Воскресенье, 05 Октября 2014, 01:44 | Сообщение # 27 |
был не раз
Сейчас нет на сайте
| Я только не пойму. У нас выходит реализуется только сама карта, но для того чтобы на нее установить персонажа и он двигался - она неюзабельна. Я сначала подумал, что мы будем при каждом перемещении на координату Х смотреть какая самая высокая точка У(Х) (надеюсь вы поняли, о чем я:)) А т.к. у нас не матрица, а вектор блоков, я немного в растерянности от того, как реализовать перемещение какого либо объекта. Автор, у вас есть идеи?
|
|
| |
goldsphere | Дата: Воскресенье, 05 Октября 2014, 06:24 | Сообщение # 28 |
заслуженный участник
Сейчас нет на сайте
| vladkomarr, название урока генератор карт,про каких-то персонажей ни слова. Сами додумывайте.
FinderX - Android Аркада
|
|
| |
Saitei | Дата: Воскресенье, 05 Октября 2014, 11:47 | Сообщение # 29 |
старожил
Сейчас нет на сайте
| Цитата vladkomarr ( ) Я только не пойму. У нас выходит реализуется только сама карта, но для того чтобы на нее установить персонажа и он двигался - она неюзабельна. Я сначала подумал, что мы будем при каждом перемещении на координату Х смотреть какая самая высокая точка У(Х) (надеюсь вы поняли, о чем я:)) А т.к. у нас не матрица, а вектор блоков, я немного в растерянности от того, как реализовать перемещение какого либо объекта. Автор, у вас есть идеи? Цитата goldsphere ( ) vladkomarr, название урока генератор карт,про каких-то персонажей ни слова. Сами додумывайте. Как и сказал goldsphere, я лишь показал один из немногих подходов генерации карт. Нет смысла в написании полноценного платформера - тогда у читателей атрофируются мозги. Программист должен решать проблемы самостоятельно. Вектор я использовал, т.к. не хочу хранить в памяти пустые блоки. Для удобства можно их заменить двухмерным массивом указателей, но я в этом не вижу смысла. Для того, чтобы ориентироваться в мире, решите одну простую задачу: проверка той или иной ячейки. Если ячейка пуста, то вернётся -1, в противном же случае - код блока. В случае с векторами надо лишь их отсортировать и юзнуть поиск. Если это сложно или неоправданно с вашей точки зрения, то используйте статический двухмерный массив (храните все блоки в памяти, включая пустые). Алгоритм от этого мало чем изменится.Добавлено (05.10.2014, 11:47) ---------------------------------------------
Цитата vladkomarr ( ) как реализовать перемещение какого либо объекта. Автор, у вас есть идеи? Крутите подобие физ. движка. Гравитацию, проверку колизий и т.п.
|
|
| |
vladkomarr | Дата: Воскресенье, 05 Октября 2014, 13:38 | Сообщение # 30 |
был не раз
Сейчас нет на сайте
| Cпасибо. Мне почему-то казалось, что каждый такой поиск по вектору требует больших вычислительных нагрузок чем хранение двумерной матрицы, пусть даже и с пустыми элементами. В любом случае, спасибо за урок, было очень познавательно!
|
|
| |
Saitei | Дата: Воскресенье, 05 Октября 2014, 14:12 | Сообщение # 31 |
старожил
Сейчас нет на сайте
| Цитата vladkomarr ( ) Cпасибо. Мне почему-то казалось, что каждый такой поиск по вектору требует больших вычислительных нагрузок чем хранение двумерной матрицы, пусть даже и с пустыми элементами. В любом случае, спасибо за урок, было очень познавательно! Если вектор большой, то нужно платить за частое удаление элементов и добавление новых. Но тут-то фигня =)
|
|
| |
vladkomarr | Дата: Воскресенье, 05 Октября 2014, 15:44 | Сообщение # 32 |
был не раз
Сейчас нет на сайте
| Что вы думаете об идее хранения карты в виде массива символов, скажем, 20 на 15(ячейка 32пиксела)? В каждой ячейке либо значение NULL, либо G(rass), L(and), F(lower). Это нормальный подход при создании платформера? Не то чтобы вопрос по изложенному материалу, просто интересуюсь, какие подводные камни в таком подходе. Тем более если сделать это в виде двумерного вектора, если мы заранее не знаем размеров карт. Вот как я закрутил o_0 С другой стороны, получение информации об определенном блоке х*у будет гораздо проще.
|
|
| |
Saitei | Дата: Воскресенье, 05 Октября 2014, 17:43 | Сообщение # 33 |
старожил
Сейчас нет на сайте
| Цитата vladkomarr ( ) Что вы думаете об идее хранения карты в виде массива символов, скажем, 20 на 15(ячейка 32пиксела)? В каждой ячейке либо значение NULL, либо G(rass), L(and), F(lower). Это нормальный подход при создании платформера? Не то чтобы вопрос по изложенному материалу, просто интересуюсь, какие подводные камни в таком подходе. Тем более если сделать это в виде двумерного вектора, если мы заранее не знаем размеров карт. Вот как я закрутил o_0 С другой стороны, получение информации об определенном блоке х*у будет гораздо проще. Имеет место быть. Но лучше буквы не запоминай, проще так: Цитата enum { LAND, GRASS, FLOWERS, ..., }; Добавлено (05.10.2014, 17:43) ---------------------------------------------
Цитата vladkomarr ( ) виде двумерного вектора Вектор нужен там, где нужна динамика.
|
|
| |
vladkomarr | Дата: Воскресенье, 05 Октября 2014, 19:27 | Сообщение # 34 |
был не раз
Сейчас нет на сайте
| Мне хочется сделать некое подобие террарии. Так что динамика скорее будет присутствовать. Я прав? Или вы имеете в виду под словом "динамика" тот случай, когда нам заранее неизвестно количество клеток на карте? Как раз тот случай.
|
|
| |
|