Показать сообщение отдельно
Старый 13.09.2014, 11:02   #8
Владислав
ПроЭктировщик
 
Аватар для Владислав
 
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений
(для 219 пользователей)
Ответ: Minecraft на Xors3D C++

CreateCube()
это в отношении "minecraft-like-game" вообще надо забыть

   Case "ground"  
      b\ent=xCreateCube()
      xEntityTexture b\ent,tex_ground
   End Select
И что, так прописывать характеристики каждого блока в коде? тебе нужно сделать базу данных, где будет указан тип блока (прозрачный/непрозрачный) его имя, текстура, звук шагов, звук удара, его дроп, количество дропа, его огнеупорность и крепость, и еще кучу параметров, но для начала хотя бы просто имя и текстуру, и хранить это все в базе, а в коде уже только обращаться к ней.

Goto end_delete_block
Уже лучше exit или return 0

xNameEntity b\ent,typ$ ;Присваеваем тип объекта в его имя
лучше хранить тип объекта в численном представлении, чем строковом, и не через имя ентити. Разумней использовать массив, уже имея этот массив тебе нужно будет строить сетку по нему, т.е. только видимые грани, между двумя соседними блоками никаких полигонов. Этот массив уже проще сохранять в файл и заполнять его от туда же.

   Select xEntityName(pick)
      Case "top": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube))+1,Int(xEntityZ(ACube))
      Case "bottom": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube))-1,Int(xEntityZ(ACube))
      Case "front": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube)),Int(xEntityZ(ACube))+1
      Case "back": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube)),Int(xEntityZ(ACube))-1
      Case "left": xPositionEntity piv,Int(xEntityX(ACube))-1,Int(xEntityY(ACube)),Int(xEntityZ(ACube))
      Case "right": xPositionEntity piv,Int(xEntityX(ACube))+1,Int(xEntityY(ACube)),Int(xEntityZ(ACube))
   End Select
Так тоже лучше не делать, все что нужно - это определить координаты "пика" (целочисленные) и воткнуть туда блок, а далее уе перестроить всю сетку. Перестраивать сетку всего мира "дорого" поэтому имеет смысл разделить его на чанки, что и сделано в minecraft. Каждый чанк это 16х16х256, если не ошибаюсь, и все что нужно при добавлении блока - перестроить 1 чанк, это несколько "дешевле". Так же удобно сохранять мир - 1 чанк - 1 файл, их же удобно и подгружать при надобности (игрок например подошел) и сохранять в файл (выгружать чанк, когда игрок ушел далеко от него).

Вообще в данном случае код на ++ ни чем не лучше кода на blitz. доступ к кабине пилота не делает тебя пилотом, как-то так.

Вот мой пример, тоже было интересна данная тема (это blitz3d)
если не грузиться то тыкнуть тут


А на скрине это уже хорс, более 4млн блоков, 232 чанка и все стабильно
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 1318
Размер:	114.1 Кб
ID:	20875  
__________________


Последний раз редактировалось impersonalis, 13.09.2014 в 18:54. Причина: тег
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо Владислав за это полезное сообщение:
impersonalis (13.09.2014), Mr_F_ (20.09.2014), SBJoker (14.09.2014), STekLyAToR (24.02.2018)