C по сравнению с Java для игрового [закрытого] программирования

Вы могли использовать Компаратор со встроенными методами Java для сортировки и двоичного поиска. Предположим, что у Вас есть класс как это, где a и b являются полями, Вы хотите использовать для сортировки:

class Thing { String a, b, c, d; }

Вы определили бы свой Компаратор:

Comparator<Thing> comparator = new Comparator<Thing>() {
  public int compare(Thing o1, Thing o2) {
    if (o1.a.equals(o2.a)) {
      return o1.b.compareTo(o2.b);
    }
    return o1.a.compareTo(o2.a);
  }
};

Затем сортируют Ваш список:

Collections.sort(list, comparator);

И наконец делают двоичный поиск:

int i = Collections.binarySearch(list, thingToFind, comparator);
23
задан Jonathan 20 October 2009 в 01:20
поделиться

15 ответов

The reason Java (and C#/.NET) is not a viable option for AAA titles at this point is the established game engines and their toolchains are written in C++. Game development is all about getting a title on the market in the shortest amount of time, and budgets don't allow for piddling in things like a new language/engine when several are already available, work well, and have an extensive set of editors and tools backing them.

Moving to Java (or C#) would also require a new performance-driven JVM (or CLI) across the big-3 (PC, X360, PS3) or big-5 (add Wii, iPhone). It's technically doable, but not financially viable.

Edit: Anyone with low-level knowledge of both virtual machines and the current state of game engines can tell you that a JVM or CLI could unquestionably be implemented with a new game engine to beat the performance of current C++ engines. The preventing factor is time and money, nothing more and nothing less.

40
ответ дан 29 November 2019 в 00:47
поделиться

I think it's mostly because c lets developers squeeze every last little bit of performance out of hardware, whereas Java doesn't, it's not low level enough for things like high end 3d video renderers. Basically c lets you squeeze out a couple more frames per second in your next gen shooter.

0
ответ дан 29 November 2019 в 00:47
поделиться

Короткий ответ заключается в том, что почти ни одна игровая платформа не поддерживает Java, или, если она поддерживает, существует гораздо лучшая альтернатива.

На игровых консолях опытные разработчики игр используют C, потому что это то, чем они занимались в течение 20 лет. Нет никаких веских причин для существования Java-игр.

На настольных ПК есть несколько игр Java, но они не могут конкурировать с лидерами рынка, такими как World of Warcraft.

В сети аплеты давно мертвы, и если вы собираетесь делать казуальную игру, она будет во Flash.

В мобильной сфере у JME было время для солнышка, но он на своем путь к устареванию перед лицом намного превосходящих платформ, таких как iPhone.

Идеальным сценарием, по которому Java станет серьезным противником в игровом мире, было бы, чтобы Sun / Oracle предоставила игровую платформу, такую ​​как Wii или iPhone - устройство, которое должно быть у каждого. Кроме того, у разработчиков есть веская причина вкладывать время в эксперименты с новыми технологиями. Но, учитывая очевидное отсутствие интереса Sun и Oracle к потребительскому рынку, шансы, что они сделают игровую установку, ничтожны.

0
ответ дан 29 November 2019 в 00:47
поделиться

I wouldn't say that it is always true that C is better than Java for game programming.

For example, if you want to write a game client which can be hosted in a web page, Java could be better.

When writing games which produce amazing 3-D graphics (e.g., Halo on the X-box), usually there is barely enough computing speed to generate all the pixels for each frame. In this kind of game, C would be preferable to Java because it allows the programmer to write faster programs -- at a large expense in terms of difficulty in extracting that speed.

0
ответ дан 29 November 2019 в 00:47
поделиться

Рынок консольных игр примерно в 10 раз больше (в финансовом отношении), чем рынок компьютерных игр. Для консолей текущего поколения все основное программирование выполняется на C или C ++ с некоторыми небольшими элементами встроенных функций или ассемблера. Если вы хотите стать профессиональным программистом игр и работать в любой крупной игровой компании, тогда изучайте C и C ++.

Ближе к делу, все коммерческие кроссплатформенные движки, являющиеся отправными точками для многих коммерческих игр, прямо сейчас также находятся на C или C ++.

Вы можете работать над небольшими играми на java и flash или даже с казуальными играми для Windows на C #. Вы даже можете кодировать C # для игр XNA, но если вы хотите сделать НАСТОЯЩИМ (нажата на DVD) играми для XBOX 360, вам необходимо изучить C ++.

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

Вы даже можете кодировать C # для игр XNA, но если вы хотите сделать НАСТОЯЩИМ (нажата на DVD) играми для XBOX 360, вам необходимо изучить C ++.

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

Вы даже можете кодировать C # для игр XNA, но если вы хотите сделать НАСТОЯЩИМ (нажата на DVD) играми для XBOX 360, вам необходимо изучить C ++.

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

0
ответ дан 29 November 2019 в 00:47
поделиться

Inertia mainly... Although it's a bit old now, you can look at Jake2 (which is a pure Java port of Quake 2 with jogl as the openGL lib).

It can perform up to 85% as fast as the C++ original, which means it's fine for most games; especially modern ones which are more social and game play based rather than the limited "hard core" games.

I'd also suggest that most of the answers you get here are coming from a gaming geek/"I want the coolest hardware and games". For [these] hard core 3D games and gamers, that final 15% is hugely important, as that's what separates the $150 graphics card from the $500 one they just bought.

As John Carmack is reported to have said (something along the lines of): "If I were to enter games programming now, I'd program for the iPhone". e.g. it's not nearly as much fun to make the fastest game with the best 3d engine as it is to make the best game.

0
ответ дан 29 November 2019 в 00:47
поделиться
  1. Java не обладает такой контролируемой производительностью
  2. Она очень обратима, поэтому ее сложнее защитить
  3. Многие игры используют языки сценариев, такие как lua ​​или python, для программирования «более высокого» уровня
  4. API большинства систем ориентирован на C.
  5. Java может использоваться для внутренних серверных систем, которые игры подключаются к
  6. Flash-игры, похоже, заняли ту нишу, которую могли бы занять Java-игры.
3
ответ дан 29 November 2019 в 00:47
поделиться

I would say, despite the other answers pointing to a lack in speed caused mainly by the JVM, that the real reason people don't code games in Java is the lack of support for environments such as DirectX and OpenGL (which actually remove the need for your code to be close to he hardware as it was suggested by some answers). They are the base frameworks that people generally use to code games, especially nowadays with 3D games being everywhere - and lack of support for them is the reason why Java is not considered as a language for game development.

To emphasize my point, I would suggest you take a look at Microsoft's XNA which is currently optimized for coding in C# via the .NET framework (which like Java is Just-In-Time-Compiled and doesn't run natively per se). The XNA framework interfaces with DirectX which talks to the hardware and so it is very fast.

EDIT

@Ed Swangren's comment made me realize yet another distinction between .NET vs Java when considered for game development. I think another strong point to .NET is that if you do need to be able to squeeze out that last bit of performance and do some pointer math or implement a sophisticated high-performance algorithm it's a lot easier thanks to the unsafe mode. Of course you can even go beyond that and write native libraries to be used by your C# code which is made pretty simple thanks to P/Invoke.

6
ответ дан 29 November 2019 в 00:47
поделиться

High performance and the inertia of C and C++ traditionally being used for games.

Choosing based on performance isn't that big a priority unless you are making a 3D extravaganza.

11
ответ дан 29 November 2019 в 00:47
поделиться

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

Java имеет привязки OpenGL, как указывали другие, поэтому добраться до оборудования не такая проблема, особенно, поскольку не всем играм это нужно, некоторые коммерческие игры были написаны для Java3D.

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

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

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

3
ответ дан 29 November 2019 в 00:47
поделиться

Because:

  1. Java is not compiled to native code, meaning that there is a performance hit the first time the code is run.
  2. Java does not give you a predictable memory model (console games need this)
  3. Java does not give you deterministic object finalization.
  4. Java is not as close to the hardware as C is, an essential for a lot of professional 3D game programming.
  5. Console programmers likely don't have a JVM that runs on the PS3, X-Box, etc.
  6. Runtime performance penalties.
  7. You will never be able to squeeze as much performance out of a Java app as you can with a C++ app.

There are probably more reasons, like the fact that they are using pre-existing code that was written in C or C++.

EDIT: As an aside, I don't think that many modern games are written in C. OOP lends itself to game development, and C++ is the de facto language of choice.

Also, I won't add it to my list, but as others have mentioned there is a lot of pre-existing code that works very well that is used in the game industry. It would not be practical to rewrite all/most of your tools just to switch to a new language especially when that switch could cause you a lot of headaches.

8
ответ дан 29 November 2019 в 00:47
поделиться

Leaving C(++) aside for the moment... I am inclined to say much of the reason is that Java lacks anything like XNA. What advantages does Java actually have over a language such as C++ when it comes to game development? You have to consider that several of it's typical advantages disappear for the specific area of game development, while C++ gains several.

XNA is what made C# a highly popular language for amateur game development, and contrary to common belief, a quite viable option for commercial development too. C#/.NET being a parallel to Java in so many ways (and arguably a better framework nowadays), when people now have the option for game development with a higher-level language, C# would seem like the much more appealing one, unless cross-platform support is essential (then again, we have Mono and OpenGL for .NET).

C (or rather, C++) has long been the language of game development due to their low-level nature (thus performance benefits) and the host of graphics frameworks (DirectX, OpenGL) and engines that primarily target them. It's usage is embedded in game development and been used virtually since the inception of the industry - and won't disappear any time soon, I suspect.

4
ответ дан 29 November 2019 в 00:47
поделиться

Я думаю, что C или C ++ - лучший язык для создания многих типов игр, потому что он ближе к оборудованию и, вероятно, будет первым языком реализован на любом новом оборудовании. Мало того, что библиотеки для доступа ко многим расширенным функциям современного оборудования, скорее всего, будут реализованы на C.

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

Например, как вы пишете код для доступа GPU, или написать собственный шейдер, или написать код, который хорошо работает на чипе Cell, или работает на Iphone, или на Blackberry на языке высокого уровня. Даже когда эти вещи поддерживаются, они выходят хорошо после того, как другие люди могут писать игры на C, которые используют эти функции в играх.

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

Java также может подойти для игр клиент / сервер, где сервер написан на Java.

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

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

Java также может подойти для игр клиент / сервер, где сервер написан на Java.

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

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

Java также может подойти для игр клиент / сервер, где сервер написан на Java.

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

Java также может быть полезна для игр клиент / сервер, где сервер написан на Java.

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

Java также может быть полезна для игр клиент / сервер, где сервер написан на Java.

2
ответ дан 29 November 2019 в 00:47
поделиться

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

1
ответ дан 29 November 2019 в 00:47
поделиться

Это не техническая проблема, а чисто проблема "клиентской оптики".

Хороший код Java может работать так же быстро, как и хороший код C ++. Он может получить доступ к OpenGL так же быстро, как и собственный C ++, через такие проекты, как LWJGL и JMonkeyEngine.

Настоящая причина в том, что Sun никогда не прикладывала усилий для выделения Java для игр и никогда не делала развертывание Java-игр особенно простым. Это ОЧЕНЬ много работы и усилий разработчика / команды, чтобы создать плавную / плавную установку (и запуск?) Для игрока.

Клиенты просто не «доверяют»

0
ответ дан 29 November 2019 в 00:47
поделиться
Другие вопросы по тегам:

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