Старомодный путь:
for ix in range(len(ints)):
print ints[ix]
понимание Списка:
[ (ix, ints[ix]) for ix in range(len(ints))]
>>> ints
[1, 2, 3, 4, 5]
>>> for ix in range(len(ints)): print ints[ix]
...
1
2
3
4
5
>>> [ (ix, ints[ix]) for ix in range(len(ints))]
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
>>> lc = [ (ix, ints[ix]) for ix in range(len(ints))]
>>> for tup in lc:
... print tup
...
(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
>>>
Попробуйте выполнить простейший трехмерный "Hello World" программа, которая использует самое основное подмножество движка. Это, вероятно, научит вас множеству.
С большой кодовой базой лучше не пытаться выучить все сразу. Просто погрузитесь в очень конкретный вопрос, на который вы должны ответить себе (или можете поискать в Интернете), или очень конкретную задачу, которую вам нужно выполнить. Такой подход дает вам цель и мотивацию, необходимые для того, чтобы заняться программированием. Обучение придет само.
Такой подход дает вам цель и мотивацию, необходимые для того, чтобы заняться программированием. Обучение придет само. Такой подход дает вам цель и мотивацию, необходимые для того, чтобы заняться программированием. Обучение придет само.Написание мода было бы хорошей отправной точкой.
Начало на обозначенной территории: ванильная игра. Измените материал. Посмотрите на код отскока гранаты. Сделайте так, чтобы он подпрыгивал дальше. Добавьте предсказание на стороне клиента (которое уже есть у непрыгающих снарядов)
Добавьте оружие телепортации. Он расскажет вам больше об обнаружении столкновений, чем вы хотели бы знать.
Есть несколько ключевых функций, которые обрабатывают большую часть игры: экспорт движка, вызов trap_ *. Это может очень помочь узнать, что именно моды делают с ними, прежде чем открывать код движка и смотреть на их реализацию.
Например, он может рассказать вам больше о движке, чтобы знать, что вам нужно вызывать LinkEntity каждые когда объект перемещается или иным образом его положение в дереве BSP игры не обновляется, и последующие вызовы движка могут его игнорировать,
На случай, если вы ищете другие движки для 3D-игр и, возможно, захотите сравнить их друг с другом, см. Dim3:
Звучит как шутка, но: найдите функцию main ()
. Это четко определенная начальная точка выполнения программы, и вы должны иметь возможность отследить все оттуда.
Это должно помочь вам выяснить, какие подсистемы зависят от каких, поскольку порядок их инициализации обычно будет восходящим. . Например, типичный движок инициализирует свою память, подсистемы отладки и трассировки на раннем этапе, поскольку большинству других систем требуются эти службы для работы.
Вы также должны быть в состоянии выяснить путь в основной цикл игры, и понять, что необходимо, прежде чем цикл получит управление.
Андре Ламот научил меня всему, что я знаю игровое программирование. Прочитав эти две книги, вы узнаете почти все, что нужно знать о 3D-движках.
В противном случае просто попробуйте написать свой собственный маленький движок для развлечения, посмотрите, как далеко вы продвинетесь, что вам не хватает, и вскоре вы начнете понимать назначение другого кода, на который вы смотрите,
Также Возможно, вы захотите посмотреть NeHe Gamedev Tutorials .
Я никогда не был большим поклонником чтения большого готового продукта. И особенно кодовой базы Quake. Есть хорошая вещь, которую вы можете узнать у него наверняка, но это не должно быть вашей отправной точкой. Вам нужно сначала узнать новые концепции, используемые в игровой программировании.
Я предлагаю поставить C ++ немного на удержание (если вы хотите сделать игру, вам действительно нужно вернуться к ней в какой-то момент), но на данный момент установите XNA. Это как отличные рамки, что и все .NET. Там есть много учебных пособий по поводу игры XNA.