![]() |
Ответ: Vivo
Немного математики для наглядности размеров мира. Пока что, координаты чанков - integer, значит крайние число - 2,147,483,647. Один чанк - 512 пикселей. Скорость игрока - 2 пикселя за тик, максимальное фпс - 60, значит скорость игрока - 120 пикселей в секунду. (2,147,483,647*512)/120 - время за которое игрок пройдёт до конечного чанка. А это - 290 лет, если я не ошибся. Так что поверьте, это сравнимо с бесконечностью.
|
Ответ: Vivo
Припустим у тебя есть переменная PlayerRange -кеп сообщает что это обзор. Значит у тебя при PlayerRange=2 будет ситуация такова:
Перс стоит на чанке. Это 0+1 чанк на котором мы стоим Видит он перед собой еще 2 чанка Это 0+1+PlayerRange Видит он еще и за собой 2 чанка. Это 0+1+PlayerRange+PlayerRange Соответственно общий размер локи будет PlayerRange*2+1 Делаешь массив Dim Chunks(PlayerRange*2,PlayerRange*2) - тут не делаешь +1 ибо нумерация массива начинается с нуля. Типо при PlayerRange*2+1 у тебя будет не 5 рядков и строк а 6 рядков и строк. А тут последняя нафик не нужна. Теперь ахтунк! Учишь это Связанные списки в Blitz3D И учишся делать так, что б в массиве Chunks(PlayerRange*2,PlayerRange*2) Каждая ячейка отвечала ТОЛЬКО АДРЕСУ на массив типов с инфой уже про каждый кубик. Потом при передвижении игрока с одного чанка на второй программируешь сдвиг рядков(или столбцов) массива содержащего АДРЕСА на другие массивы с инфой про кубики. А освободившийся рядок(или столбец) заполняешь новой инфой с файлов и не мгновенно, а по кусочку за 1 проход цикла. (звучит это весьма просто, но на собственном опыте говорю - гемора выше крыши. Я с этим до конца не разобравшись забил болт и отложил эту цель на момент релиза игры.) Вполне вероятно что ты меня плохо понимаешь, мой тебе совет, откажись от неограниченного мира, сделай хоть ограниченный но качественно. А потом думай над тем как делать его "бесконечным". Даже Нотч первые демки майнкрафта показывал с ограниченной локой(где то читал). |
Ответ: Vivo
|
Ответ: Vivo
Все эти проблемы к данной теме не относятся. Это вам не майнкрафт, который 3д, и в котором есть дальность обзора, например. Тут 2д (а может и 3д, это неважно) игра, с зафиксированным видом сверху. Так-что в любой момент времени максимум может понадобится отображать 3 чанка. О какой бесконечности речь? Короче, всё это реализуемо с помощью массивов и всю эту мизерную карту можно и нужно засунуть в 1 файл. Учите матчасть ТС.
|
Ответ: Vivo
Так я и отображаю только 3 чанка.
Кстати, у меня есть версия игры с массивами, карту можно пробежать за 44 часа, по моим расчётам. Вообще без чанков и всего такого. Можете соизволить объяснить в чём файлы так ужасны? Чего все на них так набросились? Nite Видимо мы вообще говорим о разных вещах, я не понимаю о какой мизерной карте идёт речь. Можешь подробно объяснить, как с твоей точки зрения всё это выглядит? |
Ответ: Vivo
|
Ответ: Vivo
|
Ответ: Vivo
Hulk-DS, Да, конечно. Основы программирования и тригонометрии, а так-же работа с векторами. Всё что я пытаюсь втолковать топикстартеру - это самые простые и очевидные вещи. Я не уверен что их можно будет так-же легко применить к такой модели мира в 3д, со свободным обзором.
Nikich, Тебе нужно, чтобы у игрока была земля под ногами, ну и например заранее ещё 8 чанков во все стороны от игрока (если предположить что 1 чанк у тебя по размерам как 1 экран). Итого у тебя в начале получается 9 чанков. А ты говоришь про какието 2 миллиарда:dontknow:. Потом, если игрок куда-то побежаль, начинаешь постепенно добавлять чанки, генерируя их в зависимости от ландшафта окружающих чанков. Вот собственно и вся логика. Если игрок бежит в одну сторону уже 2-3 часа, например, начинаешь с другого конца (тоест с позиции откуда игрок стартовал) удалять чанки, а потом, если когото приспичит ещё и назад прогулятся, то опять-же генерируешь новые чанки. А то, что игровую карту нужно хранить в одном файле, а не в кучке маленьких - это вообще само собой разумеется. Это и по быстродействию и по удобству и всем прочим параметрам намного удобнее и круче. |
Ответ: Vivo
В одном файле ты всё не удержишь. Представь, когда игрок будет на чанке с координатами -25,25, то ты предлагаешь пробежаться по всему файлу дабы найти этот чанк?
Конечно, сразу полезу мысли, о том, что ведь можно это дело SeekFile'ом красиво обыграть, но так тоже не выйдет, так как нельзя определить в каком месте находится этот чанк( вдруг он был сгенерирован в самом начале игры, или когда уже было открыто 1000 чанков ). Так что на файлы разбивать точно придётся. Хорошо, представь что у тебя есть эти 9 чанков. Как я понял, хранить ты их хочешь в каком-то отдельном файле. Так а смысл тогда использовать массив? Что я работаю напрямую с файлами, что по твоему способу я буду работать с файлами чтобы заполнить этот массив, а потом уже из массива брать информация о блоках. Где выгода? |
Ответ: Vivo
Цитата:
Кроме того у Нотча не лежит в папке пару тищь файлов когда пробежишься по карте. |
Ответ: Vivo
Да только SeekFileом и нужно. Тебе-же доступны координаты игрока. Темболее у тебя ведь даже не будет резких скачков, т.е. максимум может понадобиться сдвиг на один чанк в какую-то сторону. В одном файле нужно хранить чанки так-же как они расположены реально, т.е. будет требоваться полное переписывание файла с картой при добавлений нового чанка. Вот тут и вылазить причина преимущества массивов. Ты один раз загружаешь карту с медленного ЖД и один раз её туда-же и сохраняешь. При запуске и при выходе. А всё остальное время работаешь с быстрой оперативкой.
Вообще постоянный перебор чего-либо это обычно самые слабые и тормозящие места в логике. По возможности нужно этого избегать. Что такое архив? Это 1(!) файл, который содержит в себе много(!!!) более мелких файлов. Уличная магия? Не, просто алгоритмы. |
Ответ: Vivo
Вложений: 1
Ну, я сделал по-своему, просьба отписаться сколько у кого фпс, на каком железе.
А в том способе что ты сейчас написал, тоже есть изъян. Тебе ведь придеться расширить массив, если игрок решил далеко зайти. А для этого нужно выгрозить весь этот массив, расширить его и опять заполнить. Сколько же это гемора. З.Ы. я верил в магию:( |
Ответ: Vivo
В обычные моменты около 30
Когда приходят глюки от 8 и до 18 сильно скачет Целерон 1 ядро 1.8 |
Ответ: Vivo
стабильно 39-40 FPS, i5 со встроенным видео.
|
Ответ: Vivo
25-30 fps, ёжик т101мт (конфиг в подписи). Вечером проверю на стационаре
|
Часовой пояс GMT +4, время: 10:42. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot