Blitz3D

Материал из Викиучебника — открытых книг для открытого мира
Перейти к навигации Перейти к поиску

Blitz3D[править]

Генерация карт[править]

В играх, которые мы делали в Blender 2.63 сложно осуществить генерацию карт из -за того, что там все построено на объектах. Лишь все, что мы могли сделать - добавление фрагмента местности с разным поворотом. Этого недостаточно для полноценной игры. Если бы мы допустим захотели бы чтобы главный герой мог копать землю. То просто мы этого физически не смогли сделать - не хватило бы средств движка. Но эту идею (случайную генерацию карты) можно было бы осуществить с помощью Blitz3D.

В чем суть генерации карты. Вот смотрите. Есть игрок. Есть также координаты всех его точек. Теперь нам нужно автоматически с генерировать кусок карты так, чтобы герой остался стоять на ней. Для этого боем координаты нижних его точек. Заносим в массив "Player_coordinates". Далее программа должна рассчитать размер генерируемого фрагмента карты. Для этого она должна учесть текущий наклон игрока относительно плоскости XOY. Причем карта должна генерироваться автоматически. То есть с помощью Rand. То есть оператора дающий возможности случайного создания карт. При все этом карта - не просто геометрическая модель, а модель, полигоны которой состоят из точек. Также размер полигона должен определяться случайно с помощью массива. Количество точек из которых состоит полигон, который будут сгенерирован сейчас будет случайным.

Ямы в поверхности[править]

Для создания м в поверхности требуется знать номер полигона. Также количество его точек. И цвет. Например, нужно сделать возможность игроку копать поверхность. Для этого нужно просто заменить какой-то полигоy несколькими полигонами, причем, учитывая:

  • место в котором игрок быдло копать
  • высота ямы

Метод: end & repeat (ER)[править]

Этот метод утверждает, что можно сделать генерацию карты зная только первые точки и три массива. Первый из которых - Xcoordinates, второй - Ycoordinates, третий - Zcoordinates. Зачем нужны эти три массива и как с ними работать? Сначала вспомним о том, что массив - это очень ценная вещь в руках программиста. Также следует сказать о том, что массив может хранить неограниченное кол-во элементов. И это пригодится нам в создании своего генератора ландшафтов. Ну, что ж, начнем!

Сначала объявим массивы с количеством элементов равным 100. Далее заполнив массив Zcoordinates случайными значениями, следуя такой логике: Пока переменная, хранящая текущий элемент массива не равна числу, большим на единицу, максимального элемента массива

Метод: move some point (MSP)[править]

Физика[править]

Создание своего физического движка[править]

Как и во всех нормальных играх в нашей игре должна быть нормальная физика. Та физика, которую предоставляют обычно игровые движки довольно примитивная. Вспомните, например, объект с типом физики dinamic. Это просто ужас! Физика просто этого типа мало интересная и используется в таких играх, как Catch cube 4. Почему. Потому, что поверхность плоская. И еще игроки же кубики. И в принципи и слабой физике достаточно. Все нормально выглядит. Зачем тратить оперативную память на просчет полноценной физики? Вернемся к программированию физики. Каждый объект должен обладать следующими свойствами физике в игре:

  • возможность упасть при столкновении
  • возможность поворачиваться, но не падать, если какой-то объект сильно, но медленно давит на игрока со стороны
  • возможность гравитации

Если этот объект не игрок, а просто, например, коробка, кровать, шкаф, то объект должен обладать такими свойствами, как:

Возможность:

  • гравитации
  • поворота объекта в зависимости от давления других объектов на него
  • возможность изменить форму в зависимости от количества объектов давящих на него

Если это дверь у дома:

Возможность:

  • гравитации
  • поворота объекта в зависимости от давления других объектов на него

Гравитация[править]

В игре гравитация имеет более точное понятие чем в жизни. В игре, как правило, присутствует гравитация из-за холмов на местности или ям в ней. Гравитация в игре - это смещение объекта по оси Z через заданные промежутки времени до тех пор пока выполняется условие: координаты точек объекта не равны координатам точек другого(их) объектов. А это означает, что объект будет падать до тех пор, пока не упадет на какой-то другой объект. Но гравитации не совсем достатоно в игре. Так например, если есть куб и наклонная плоскость под ним. Если бы была только гравитация, то куб упал на плоскость и остался на месте потому, что он коснулся объекта. А что же тогда можно было сделать в этой ситуации? Можно было бы составить программу, работающую по следующему принципу:

  1. Есть четыре вершины нижнего полигона куба: A,B, C, D.
  2. если координаты вершины A равны координатам плоскости, то сместить куб на 1 по глобальной оси X.

Перемещение объектов[править]

Коллизия[править]

Описание типа Dinamic в Blender[править]