Каковы основы разработки игр? [закрыто]

12

Я совершенно не понимаю, как видеоигра может быть закодирована.

Я начинающий программист и имею опыт написания консольных приложений, которые делают математику, а что нет. Я не понимаю, как эти логические процессы могут заставить изображения двигаться на экране (видеоигры). Очевидно, что если бы я заскочил в книгу по разработке игр или что-то в этом роде, я бы понял, но в настоящее время я все еще понимаю основы программирования в целом. Может ли кто-нибудь дать простое объяснение, мудрое программирование, о том, как заставить компьютер делать простую математику, чтобы заставить компьютер создавать удивительные графические программы, такие как видеоигры? Может быть, есть какие-нибудь вступительные видео, на которые кто-то может указать мне?

Matt
источник

Ответы:

14

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

Если вы задумывались о создании своего меню, у вас есть пункт, но что если после того, как пользователь нажал клавишу, которая не является частью доступной опции,

  1. выйдет ли ваше приложение или
  2. Будет ли оно продолжаться до тех пор, пока пользователь не нажмет клавишу «Выход»?

Моя ставка будет №2, приложение будет продолжаться до тех пор, пока пользователь явно не нажмет клавишу для выхода из консольного приложения.

Игра как-то похожа! Когда вы хотите выйти из игры? Когда пользователь выбирает, верно? Следовательно, действие или меню игры должны длиться до тех пор, пока пользователь не захочет выйти. Затем вам нужно будет создать цикл, который говорит программе продолжать до тех пор, пока не будет нажата эта самая клавиша выхода.

Вы только что познакомились с игровым циклом. Игра - это просто еще одна программа, которая запускается до тех пор, пока пользователь явно не закроет ее.

Находясь в игровом цикле, когда вы играете в игру, ходы - это изображения, нарисованные на экране в определенных координатах. Когда пользователь / игрок нажимает клавишу направления, такую ​​как[Left] , вы заставляете ваше изображение обновлять свои координаты, уменьшая его координату X, чтобы создать впечатление движения в направлении влево. Вы должны получить эти входные данные для того, чтобы узнать, какое действие игрок хочет, чтобы его персонаж / корабль сделал дальше. Затем цикл игры продолжает цикл до тех пор, пока вы не сможете получить другое желаемое действие от игрока, пока игра не будет завершена.

Боюсь, этот ответ станет достаточно длинным, поэтому позвольте мне задать вам два других вопроса, которые могут вас заинтересовать, я надеюсь.

  1. С чего начать писать игры, какие-либо учебные пособия или тому подобное?
  2. Перемещение моего спрайта в XNA с использованием классов .

Эта третья ссылка не о том, как начать писать игры, а о том, как заставить спрайт двигаться на экране. Поскольку вы также спрашивали о том, как заставить графику двигаться на экране, я подумал, что это может вас заинтересовать.

Надеюсь, это поможет! знак равно

Уилл Маркуиллер
источник
4

Когда вы создаете консольные приложения, вы, скорее всего, используете функции, называемые print () или read () или write (). Вместо этого в графических играх используются другие функции, которые могут быть такого же низкого уровня, как set_pixel (), чтобы установить цвет отдельного пикселя на экране, для целых каркасов, которые позволяют рисовать трехмерные модели с большим количеством эффектов.

Но основная идея та же, что и для простого математического консольного приложения. Вы получаете ввод от пользователя, действуете в соответствии с ним, чтобы изменить некоторые переменные, а затем распечатываете (или рисуете) некоторые выходные данные. Игры и другие интерактивные программы выполняют 30, 60 или более из этих циклов ввода-вывода-вывода, которые происходят каждую секунду. Конечно, каждая часть может быть настолько сложной, насколько вы хотите, но обычно все сводится к вводу-вычислению-выводу. Так что не волнуйтесь, вы на правильном пути.

Что касается рекомендаций, я бы сказал, что вы продолжаете программировать столько, сколько можете. Если вам интересно сосредоточиться на программировании игр, и вы знаете только консольное программирование, попробуйте сделать небольшое текстовое приключение или RPG. Таким образом, вы будете много практиковаться в управлении переменными, использовании случайных чисел и организации своего кода.

После того, как вы приобретете некоторый опыт, ознакомьтесь с основами графической библиотеки. Если вы занимаетесь процедурным программированием, я бы порекомендовал OpenGL, а если вы занимаетесь объектно-ориентированным программированием, я бы порекомендовал XNA.

Однако не принимайте слишком много вещей одновременно. Очень легко разочароваться в изучении сложного инструмента, в то время как вы учитесь управлять деревом исходных текстов, в то время как вы учитесь итерировать массив, в то время как вы учитесь получать ввод и звук, все время Вы разрабатываете свою игру.

Впереди еще долгий путь, но помните, что самое интересное - пройтись по нему.

Продолжайте хорошую работу!


источник
4

Компьютерная игра - это бесконечный цикл:

  • Обновление: продвиньте состояние игры на один крошечный отрезок времени (например, 1/80 секунды).
  • Нарисуйте текущее состояние игры.

Есть варианты этого. Некоторые игры имеют больше обновлений между каждой краской, или они могут варьироваться, чтобы сделать игру одинаково гладкой на разных машинах. Но это технические детали.

Фаза обновления, которая происходит между 50 и 100 раз в секунду (да, это так часто), делает это:

  • Обновите физику игр. Скажите, что у актера есть скорость. Обновление должно переместить его чуть-чуть в правильном направлении. Также, если вы используете физический движок, он должен проверять наличие столкновений с другими актами или препятствиями.
  • Обновите правила игры. Это то, что делает это игрой, а не физическим экспериментом. Скажите, что пуля попала в игрока актера. Правила игры предписывают игроку вычитать X очков здоровья и пули исчезать.
  • Обновления AI. Иногда актеры, управляемые компьютером, должны решить, что делать. Идти налево или направо? Найдите путь к хорошему месту, чтобы быть. Стреляй из оружия.
  • Контроль ввода. Обновите актера игрока в соответствии с кнопками на клавиатуре.
  • Обновить граф сцены. Это может быть продвижение анимации на один шаг или обновление графического интерфейса, чтобы показать, что у игрока теперь на 10 пунктов меньше здоровья. Единственная цель - сделать игру приятной на вид.

С чего начать?

Основным требованием к графической игре является программирование графики. Убедитесь, что вы можете открыть окно и нарисовать в нем шар.

Я предполагаю, что вы можете сделать какие-то занятия. Сделайте урок Ball. Он имеет следующие члены: x, y, deltaX, deltaY. Все целые числа и в пиксельных масштабах. Теперь напишите этот цикл.

forever, do this {
  start measure time (in milliseconds)
  //physics part
  add deltaX to x
  add deltaY to y
  if x is bigger than the screen width, assign -deltaX to deltaX
  if y is bigger than the screen height, assign -deltaY to deltaY
  if x is less than 0, assign -deltaX to deltaX
  if y is less than 0, assign -deltaY to deltaY

  //paint
  paint the ball at x, y
  stop measuring time, assign this to workTime
  make the thread sleep for (25 - workTime) milliseconds
}

Это заставит шар отскочить от границ окон. Это еще не игра , скорее физическая симуляция. Если вы напишете обновление физики шаров внутри класса, легко добавить несколько шаров. Сохраните их в списке и обновите и раскрасьте каждый для каждого кадра.

Вы можете добавить весло (имитировать физику для него и сделать его управляемым с помощью мыши или клавиатуры) и игровую цель, например, не дать мячу достичь левой стены. Если в игру добавляется все больше и больше шаров, сложность возрастет. У тебя есть игра.

Зачем спать в течение (25 - workTime) миллисекунд? Если вы сделаете это так, симуляция будет выполняться с постоянной скоростью 40 обновлений и красок в секунду. Это будет довольно гладко. Если вы пропустите часть сна, анимация будет прерывистой и займет 100% процессорного времени. Кроме того, скорость мяча будет зависеть от скорости машины, на которой он работает. Теперь вертикальная скорость мяча составляет 40 * deltaY пикселей в секунду.

Gunslinger
источник
2

Возьмите консольную программу, которая выполняет математику, а затем, когда вы поставите правильный ответ, заставьте ее снять конфетти ... Это стало игрой (Кто-нибудь, кроме меня, играет в Math Blaster в детстве? :)).

Что касается того, как компьютеры созданы для создания игровой среды, то иногда может быть немного сложно обернуть голову, но все сводится к применению понимания человеком окружающего мира. Игры используют ту же математику, физику и науку, чтобы определить себя, когда мы применяем их к окружающему нас миру, чтобы объяснить, как это работает.

Сим-игры - хороший пример реального и виртуального. Давным-давно я читал интервью с парнем, стоящим за играми Sim, и почти все они, за исключением, родились от чтения на тему, пытаясь объяснить мир вокруг нас, затем были использованы математические формулы и помещены в виртуальную среду представлять это. Например, SimCity была основана на попытках симулировать основы экономики.

Что касается специфики того, как вы создаете трехмерную игровую среду, вкладываете в нее физику, добавляете немного аудио, позволяете пользователю начать взаимодействовать с ним ... Хорошо, для этого существует этот сайт и многие другие, и было бы невозможно Подводя итог более конкретному ответу.

В конце дня я описываю видеоигры как очень быстрые базы данных с ограниченным набором данных. Они сосредоточены на реляционных данных и высокоскоростном доступе к данным. Я имею в виду, что если вы визуализируете фрейм каждые 60 секунд, вы обрабатываете потенциально большие объемы данных очень быстро, основываясь на зависимости того, где находится игрок в игре. ко всем другим данным, отслеживаемым игрой :)

Джеймс
источник
Lol, «видеоигры как очень быстрые базы данных с ограниченным набором данных», вероятно, только добавляют путаницы.
Майкл Бартнетт
1

Что вам нужно понять, так это матрицы. Они лежат в основе игр. Как только вы поймете силу матриц, вы увидите, как игры сводятся к простой математике.

Вы занимаете позицию вершины в игровом пространстве. Вы проецируете его с помощью матрицы на экран (найдите его координаты на экране). Вы интерполируете несколько пикселей между ним и его соседними вершинами, и все готово. Это, очевидно, чрезвычайно большое упрощение, но основы растеризации совсем не сложны, когда вы начинаете работать с матрицами.

DeadMG
источник