Динамический массив (работа с видимой областью уровня)
|
|
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 |
Сэнсэй
Сейчас нет на сайте
| В любом случае неплохо бы необходимую часть кода показать, а то так не очень понятно. Ну и не должно оно много памяти "жрать"
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
ilgamer | Дата: Пятница, 21 Сентября 2012, 14:37 | Сообщение # 6 |
Needle Games
Сейчас нет на сайте
| Ну, предположим что каждый уровень это от 1000 ячеек типа int. Уровней у меня выйдет около 30-40. Уверены что не стоит корячиться из за такого объема памяти? Quote скорость чтения из оперативной памяти в разы больше чем с диска Я собирался работать только с оперативкой. На диск ничего не записываю именно по этой причине.
Сообщение отредактировал ilgamer - Пятница, 21 Сентября 2012, 14:40 |
|
| |
|
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 Мб переживать) Само собой
А вот рисовать, действительно, лучше только то что видно на экране (не весь уровень).
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
TimKruz | Дата: Пятница, 21 Сентября 2012, 15:39 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| Quote (ilgamer) Есть массив уровней (хранит указатели на массив каждого уровня), но это неважно. Зачем массив уровней? Просто храни номер уровня в одном байте. А все уровни подгружаются в один и тот же массив (который можно растягивать или сжимать при необходимости). Quote (ilgamer) храниться ID блока. Это целое число (int) Тогда уж лучше word (два байта) или вообще byte... Или у тебя будет 4294967296 типов блоков? Вряд ли у тебя будет больше 256 типов. Хотя там может быть и дополнительная информация (кроме ID), но двух байт должно хватить.
|
|
| |