![]() |
Создание больших массивов.
Не могу создать большой массив. Мне выдает Memory acces violation
Большой это: 1000х1000х1000 Если беру 1000х1000х300 то все делается ок, только оч долго прога грузится. Ну в принципе я понимаю что это 300 млн. значений. Это какое то ограничение в блитсе или природа сей ошибки неизвестна?:SOS: |
Ответ: Создание больших массивов.
даж если бы у тебя 1 ячейка занимала 1 байт, то это выходит 1000*1000*1000 = 1000000000 = 976562.5kb = 953.67mb.
но ячейки скорее всего больше 1 байта. у тебя просто оперативки не хватает. |
Ответ: Создание больших массивов.
А каг тогда хранить информацию? Оо
Полюбому должен быть способ. Много игрушек есть похожих с подобных построением ландшафта. |
Ответ: Создание больших массивов.
нотч не настолько ещё говнокодер чтобы такие массивы создавать.
у него мир из чанков 256х16х16 пруф: http://www.minecraftwiki.net/wiki/Chunks в кадре чанков тоже не тысяча, к тому же даже нет резона хранить уникальные свойства всех кубиков всех чанков в кадре, это нужно только рядом с игроками и редстоун механизмами, остальное можно просто рендерить цельными мешами и не задаваться другими вопросами. |
Ответ: Создание больших массивов.
Почитай эти статьи: Дерево (структура данных) и Октодерево
|
Ответ: Создание больших массивов.
деревья уже для поиска элементов нужны, проблему количества данных они не решают.
|
Ответ: Создание больших массивов.
Согласен, элементы будут храниться на диске, в память будет загружен небольшой фрагмент. Октодерево поможет этим правильно управлять.
|
Ответ: Создание больших массивов.
Цитата:
Я просто спросил что не знал. Спасибо за подсказки. Уже есть вопросы, но сначала прочитаю ссылки. |
Ответ: Создание больших массивов.
RBK я понял что ты хотел сказать что то важное, но прости, я этого не понял. Понял только то что мне нужно хранить инфу в виде октодерева. То есть ячейки с 8 чилдами. Но я даже не представляю как это сделать без массива. (была идейка как то использовать для этого типы, но походу бред)
Насчет чанков: Если создать файл с информацией о ландшафте. И пусть он даже бесконечно большой, но одновременно загружено чанков в память будет припустим 441 как у Нотча(это кстате 14,5млн ячеек в массиве). Во время перехода с одного чанка на другой мне придется часть чанков что за областью зрения выгружать, а другую часть подгружать. Что сделают большие рывки во время игры. Я конечно знаю что в мморпг есть какой то отдельный буфер в котором подгружаются все текстуры и меши во время игры не влияя на фпс(на норм машинах), но помойму в блитсе еще такого нету... Как же хранить и подгружать инфу о больших ландшафтах вроде того как это делал нотч но на блитсе? Очень помогло б без кода описать сам принцип словами и примерами. Заранее сенк |
Ответ: Создание больших массивов.
Цитата:
Цитата:
|
Ответ: Создание больших массивов.
Спасибо. Теперь ясно. Но походу геморно ппц.
|
Ответ: Создание больших массивов.
Цитата:
Код:
Цитата:
Как создать dll библиотеку для блица в PureBasic(спасибо MadMedic за статью) P.S. для тех кто хочет повозражать, "бдиц устарел(другие варианты)", вопрос был: Цитата:
|
Ответ: Создание больших массивов.
Вроде в майне чанки хранятся в сжатом виде в папочке игры. А вообще, имхо, разумнее сделать алгоритм генерации зависящим от координат чанка, и если его никто не меняет - то и не сохранять. (тогда не будет проблем с ушедшими на 100500 далеко игроком)
|
Ответ: Создание больших массивов.
Но тогда скорее всего мир будет меняющимся..
Допустим игрок ушёл далеко - нашёл что-то особое в этом месте. Но ему нужно возвратиться (чтобы освободить инвентарь), а потом опять идти к тому месту. Но мир уже перегенерировался.. |
Ответ: Создание больших массивов.
Цитата:
А если игрок начнёт что-то строить, уже ничего не поделать - сохранять изменённый чанк и тратить память |
Ответ: Создание больших массивов.
Самим ярким для моего моска выдался этот вариант:
Цитата:
Цитата:
Код:
Global World=CreateMesh() Но после этого встает еще один вопрос. Если я зделаю: Код:
ClearSurface(N\Surface) Тоесть я просто неувидел никакой команды вроде: FreeSurface(Surface) или DeleteSurface(Surface). А нужны ли они вообще? Или их вполне заменяет ClearSurface |
Ответ: Создание больших массивов.
Цитата:
Цитата:
|
Ответ: Создание больших массивов.
А так вроде Меш по новой составлять нужно будет.
FreeSurface не предусмотрели :( |
Ответ: Создание больших массивов.
Опять немного застрял. Я типы понимал хорошо но вот с типами внутри типов немного туговато. А без нужного знания, как я понимаю совершить такое:
Цитата:
Ну а в целом, я прочитал статейку в Blitz et Cetera по Связанных списках раз пять. Но без вашей помощи не разберусь. Как я говорил выбрал метод с типами. И реализовал все примерно так: Код:
Global World=CreateMesh() -Главный меш поверхности. В конце этой функции вызывается еще одна CoverWorld(), которая и покрывает наш мир вертексами и треугольниками. Теперь мы подошли к моей проблеме впритык и долгих, возможно ненужных описаний давать больше не буду: :) Функция создания нода(куба): Код:
Function CreateNode(X,Y,Z,L,R,B,F,D,U) |
Ответ: Создание больших массивов.
без For Each не как, это же типы, можно исхитрится, через память…
Цитата:
Цитата:
|
Ответ: Создание больших массивов.
пиши не
If L -Если переменная L имеет значение True - создаем сторону: B.Side=New Side ... а сразу N\LS=New Side |
Ответ: Создание больших массивов.
Цитата:
Цитата:
Цитата:
Цитата:
п.с. А если тип уже создан, как его добавить? Оо |
Ответ: Создание больших массивов.
|
Ответ: Создание больших массивов.
ну так же и обращятся !! у тебя уже сохранен указател на сайд !! форич тут ненужен !!
N\LS\field_твоего_типа_сайд = значение |
Часовой пояс GMT +4, время: 02:09. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot