Воскресенье, 17 Ноября 2024, 14:40

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Динамический массив (работа с видимой областью уровня)
ilgamerДата: Пятница, 21 Сентября 2012, 14:05 | Сообщение # 1
Needle Games
Сейчас нет на сайте
В связи с тем что я храню уровни в виде массивов в коде, при запуске она жрет столько памяти, скольку нужно чтобы загрузить в нее уровня.
Возможно ли реализовать загрузку только 100 первых ячеек в память (например используя new и delete)?

Если есть примеры, буду благодарен. Если я где-то оказался неправ, поправьте.
Заранее спасибо. С меня плюс.




Сообщение отредактировал ilgamer - Пятница, 21 Сентября 2012, 14:12
-=WarChief=-Дата: Пятница, 21 Сентября 2012, 14:12 | Сообщение # 2
почетный гость
Сейчас нет на сайте
100 первых уровней? обясни поподробней что тебе нужно сделать, формат хранения уровней и.т.д.
ilgamerДата: Пятница, 21 Сентября 2012, 14:15 | Сообщение # 3
Needle Games
Сейчас нет на сайте
Каждый уровень - двумерный массив в каждой ячейке которого храниться ID блока. Это целое число (int).
Есть массив уровней (хранит указатели на массив каждого уровня), но это неважно.

Мне необходимо загружать в память только видимую часть уровня. То есть высчитываем положение игрока и относительно него отрисовываем блоки по обе стороны в пределе видимости. Остальная часть массива должна быть не загружена в память. Если это реально, то мне очень нужна помощь в реализации.




Сообщение отредактировал ilgamer - Пятница, 21 Сентября 2012, 14:19
-=WarChief=-Дата: Пятница, 21 Сентября 2012, 14:21 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Ты представляешь как ето будет медленно? скорость чтения из оперативной памяти в разы больше чем с диска, тут нужно другое решение проблемы. Да и разве так же много занимают масивы указателей или чисел?

Добавлено (21.09.2012, 14:21)
---------------------------------------------
Или тебе нужно только отрисовывать видимую часть уровня, а не хранить в памяти ?

ArchidoДата: Пятница, 21 Сентября 2012, 14:26 | Сообщение # 5
Сэнсэй
Сейчас нет на сайте
В любом случае неплохо бы необходимую часть кода показать, а то так не очень понятно. Ну и не должно оно много памяти "жрать" smile

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ilgamerДата: Пятница, 21 Сентября 2012, 14:37 | Сообщение # 6
Needle Games
Сейчас нет на сайте
Ну, предположим что каждый уровень это от 1000 ячеек типа int.
Уровней у меня выйдет около 30-40.
Уверены что не стоит корячиться из за такого объема памяти?
Quote

скорость чтения из оперативной памяти в разы больше чем с диска

Я собирался работать только с оперативкой. На диск ничего не записываю именно по этой причине.




Сообщение отредактировал ilgamer - Пятница, 21 Сентября 2012, 14:40
RomanNVKZДата: Пятница, 21 Сентября 2012, 14:39 | Сообщение # 7
участник
Сейчас нет на сайте
Проще этого не делать. Лучше просто выводить ту часть карты, которая видна игроку. И хорошая скорость, и проц не жрёт.



ilgamerДата: Пятница, 21 Сентября 2012, 14:40 | Сообщение # 8
Needle Games
Сейчас нет на сайте
Ок, всем спасибо

ArchidoДата: Пятница, 21 Сентября 2012, 14:43 | Сообщение # 9
Сэнсэй
Сейчас нет на сайте
Ну именно уровни то можно и подгружать при необходимости, да (только смысла нет, ибо малый размер).

А вообще 10000 (имено 10 тыс.) int - это 40 тыс. байт. 40K bytes * 50 levels = 1 Mbyte на 50 уровней.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Пятница, 21 Сентября 2012, 14:44
ilgamerДата: Пятница, 21 Сентября 2012, 14:45 | Сообщение # 10
Needle Games
Сейчас нет на сайте
Ну, да, Archido... Думаю что не стоит так из за 1 Мб переживать)

ArchidoДата: Пятница, 21 Сентября 2012, 14:47 | Сообщение # 11
Сэнсэй
Сейчас нет на сайте
Quote (ilgamer)
Думаю что не стоит так из за 1 Мб переживать)

Само собой happy

А вот рисовать, действительно, лучше только то что видно на экране (не весь уровень).


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
TimKruzДата: Пятница, 21 Сентября 2012, 15:39 | Сообщение # 12
старожил
Сейчас нет на сайте
Quote (ilgamer)
Есть массив уровней (хранит указатели на массив каждого уровня), но это неважно.

Зачем массив уровней? Просто храни номер уровня в одном байте. А все уровни подгружаются в один и тот же массив (который можно растягивать или сжимать при необходимости).
Quote (ilgamer)
храниться ID блока. Это целое число (int)

Тогда уж лучше word (два байта) или вообще byte... Или у тебя будет 4294967296 типов блоков? biggrin Вряд ли у тебя будет больше 256 типов. Хотя там может быть и дополнительная информация (кроме ID), но двух байт должно хватить.


  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг