Прочитав эту напыщенную речь , я чувствую, что они, вероятно, правы (учитывая, что Xenon и CELL BE оба очень чувствительны к ветвящемуся и кешированному коду ), но я слышал, что люди тоже делают игры на C # тоже хорошо.
Итак, правда ли, что с XNA невозможно сделать что-то профессиональное , или просто не хватает плаката, что делает XNA убийственным API для разработки игр?
Под профессиональным я не имею в виду, что вы можете зарабатывать на этом деньги, а скорее в том смысле, что более профессиональные игры имеют физические модели и системы анимации, которые кажутся вне досягаемости языка с такими определенными барьерами для внутренней среды. , Если бы я хотел написать систему столкновений или движок динамической динамики для своей игры, я не чувствую, что C # предлагает мне шанс сделать это, поскольку генератор кода времени выполнения и отсутствие встроенных функций мешают производительности.
Тем не менее, многие люди, кажется, прекрасно работают в этих условиях, создавая свои успешные игры, но, по-видимому, избегая любых проблем из-за упущения. Я не заметил, чтобы в играх XNA было что-то сложное, кроме того, что уже предоставлено библиотеками или обрабатывается шейдерами. Это избегание более сложной игровой динамики из-за ограничений C # или просто людей, концентрирующихся на достижении этого ?
Честно говоря, я не могу поверить, что война ИИ может поддерживать столько юнитов ИИ без какого-либо подхода, ориентированного на данные, или каких-то грязных взломов C #, чтобы заставить его работать лучше, чем стандартный подход, и я думаю, что это тоже частично мой вопрос, как люди взломали C #, чтобы он мог делать то, что программисты игр делают естественным образом с C ++?
Ответы:
Хорошо, просто чтобы пробить дыры в той разглагольствованию, которое вы связали:
XNA на Xbox 360 работает на модифицированной версии .NET Compact Framework CLR. Я не сомневаюсь, что это не соответствует стандарту настольной версии. JITter, вероятно , не так хорош, но я тоже не думаю, что это плохо . Я удивлен, что он не упомянул сборщик мусора, который ужасен по сравнению с настольным CLR.
(Конечно, в любом случае вы не должны попадать в сборщик мусора в профессионально разработанной игре, так же как вы должны быть осторожны с распределением в любой игре профессионального уровня.)
(Для реального технического обсуждения .NET Compact Framework, возможно, начните с этой серии статей: Обзор , JIT-компилятор , GC и куча .)
То, как он совершенно не определен в своей терминологии, затрудняет даже понимание того, что он имеет в виду. Либо он в режиме максимальной ярости, либо не знает, о чем говорит.
Теперь, когда мы получили , что из пути, вот некоторые вещи , которые вы бы пропустить с помощью XNA на 360, а не идти родным :
Также стоит отметить, что это только ограничения на стороне процессора. У вас все еще есть совершенно бесплатный доступ к графическому процессору.
Я описал эти вещи в этом ответе на тот же вопрос, что и этот. Как я уже упоминал в этом ответе, XNA абсолютно подходит для «профессионального» развития .
Единственные причины, по которым вам следует избегать, это то, что вы не можете нанять талант C #, лицензировать движки C # и повторно использовать существующий код C # так же, как вы можете использовать существующую базу знаний C ++. Или потому что вы также можете ориентироваться на платформу, которая не поддерживает C #.
Конечно, для многих из нас, кто не является «профессиональным» разработчиком, XNA - наш единственный вариант, чтобы перейти на Xbox 360, что делает вопрос спорным.
Чтобы ответить на другие ваши вопросы:
Ничто в C # не мешает вам использовать ориентированные на данные подходы практически так же, как вы используете их в C ++.
В C # отсутствует возможность автоматического встроенного кода во время компиляции, и (без необходимости проверять) я почти уверен, что JITter компактного CLR не может встроить методы (CLR рабочего стола может). Поэтому для кода, критичного к производительности, вам, возможно, придется вручную встроить C #, где C ++ предоставляет некоторую помощь.
Вероятно, еще одной причиной, по которой вы не часто сталкиваетесь с такими сложными математическими процессорами, как обнаружение столкновений и симуляция флюидов в C #, является отсутствие доступа к векторному блоку (как упоминалось выше).
источник
object
типу. И в версии 1 (до генериков) вы не могли поместить их в контейнер, не являющийся массивом, без упаковки в них. Но в наши дни писать код без коробки очень просто. И CLR Profiler позволяет вам обнаружить любое место, где вы можете заниматься боксом.Вы должны определить «профессионал». Не могли бы вы сделать Angry Birds, Plants vs Zombies и т.д.? Абсолютно. Не могли бы вы сделать Crysis 2, COD, Halo? Я в этом сомневаюсь. Использование C # действительно только повлияет на игры, которые сильно нагружают процессор, а также должны сжать каждый последний байт памяти (вы проигрываете сборщику мусора), так что вы можете сделать очень много.
Как инструмент обучения для начинающих, инструмент для создания прототипов, платформа для написания игр, которые могут справиться с компромиссом, и т. Д., Он фантастический, обладает большой мощью и простотой, он просто не предназначен для того, чтобы делать то, что вам нужно Назовите «ААА» игры. Это также снимает много боли и страданий, которые приходится переживать людям с кроссплатформенным портированием и совместимостью.
Если вы придумываете удивительную игру и сталкиваетесь с ограничениями того, что вы можете сделать с XNA, то я бы посоветовал связаться с MS напрямую, если идея действительно достаточно хороша, они могут просто позволить вам получить полную разработку Комплект.
источник
unsafe
код часто медленнее, чем безопасный эквивалент, потому что он уменьшает количество оптимизаций, которые может выполнять CLR. Вы должны измерить это.Простой факт заключается в том, что вам не нужно большое количество полигонов, полное освещение HDR или самая интересная физика в мире, чтобы сделать интересную игру, и если ваш план игры не включает ни одного из них, то почему бы не пойти быстрее время разработки решения?
Это просто неправильно. Профессиональные игры имеют то, что им нужно для реализации своего игрового процесса и достижения своего художественного облика, и ни больше, ни меньше. Игра не более профессиональна, потому что выглядит более реалистично или имеет более детальную физику. Профессиональная игра достигает своих целей в игровом процессе и визуальных задачах, в срок, в рамках бюджета и т. Д., И доставляет прибыль.
источник