Действительно ли Objective C является подходящим языком для 3D игр?

Интересный момент, хотя и не связанный с объектно-ориентированным программированием, сделан в руководстве по стилям кодирования linux :

Глава 4: Функции

Функции должны быть коротко и сладко, и делаю только одно. Они должны помещаться на один или два экрана текста (размер экрана ISO / ANSI составляет 80x24, как мы все знаем), и делать одно, и делать это хорошо.

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

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

Другой мерой функции является количество локальных переменных. Они не должны превышать 5-10, или вы делаете что-то не так. Переосмыслите функцию и разбейте ее на более мелкие части. Человеческий мозг, как правило, может легко отслеживать около 7 различных вещей, что угодно, и это запутывается. Вы знаете, что вы великолепны, но, возможно, вы хотели бы понять, что вы сделали через 2 недели.

5
задан Hooray Im Helping 30 May 2009 в 03:24
поделиться

3 ответа

Objective-C 2.0 имеет сборку мусора, доступную в Mac OS X 10.5, но это необязательно - вы все равно можете компилировать приложения Objective-C без сборки мусора, если хотите. На других платформах (iPhone, Mac OS X pre-10.5 и т. Д.) Сборка мусора отсутствует, и вам нужно вручную управлять своей памятью.

Objective-C - это строгий надмножество C, так что вы можете написать простой C в Objective-C, если хотите. Следовательно, нет причин не использовать Objective-C для игр, которые не применимы и к использованию C. Вы можете использовать дополнительные функции, которые Objective-C предоставляет столько, сколько захотите.

7
ответ дан 13 December 2019 в 19:34
поделиться

Единственным реальным замедлением работы самого Objective-C был бы механизм обмена сообщениями - и даже в этом случае, как правило, это компоненты инфраструктуры Какао, которые замедляют работу. Отправка сообщений Objective-C на самом деле не вредит производительности , что сильно.

В любом случае, для большинства игр большинство узких мест в производительности возникает из-за графического кода: если вы делегируете графические элементы OpenGL, что смехотворно быстр, то проблем с использованием Objective-C для игр быть не должно. Единственное другое место, где я могу увидеть узкие места Objective-C или Cocoa, - это интенсивный физический код - и его, вероятно, в любом случае следует писать на чистом C / C ++. Все остальное, впрочем, не должно иметь большого значения.

Если честно, я '

5
ответ дан 13 December 2019 в 19:34
поделиться

Objective-C does not have automatic garbage collection. Java has various methods of garbage collection and some of them are designed to be compatible with games by occurring incrementally at regular intervals. I would be surprised if C# or anything else which also had garbage collection didn't have multiple methods to choose from, some of which are compatible with games.

The only thing off the top of my head that would might make a game unsuitable for 3D games would be if it were interpreted and particularly slow in its implementation. That's not a characteristic of anything you listed above.

P.S. To address your original question, I'm pretty sure anyone who has an iPod Touch or iPhone will be able to tell you that Objective-C is definitely up to 3D games :)

-1
ответ дан 13 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: