Было бы возможно записать 3D игру, столь же большую как World of Warcraft в чистом Python?

Я вижу, у вас есть тег iPad. Вы случайно представляете модальное представление с использованием UIModalPresentationFormSheet? Если это так, то это выглядит как ограничение модальной презентации FormSheet (либо Apple по какой-то причине делает это намеренно, либо это ошибка). См. Эти другие вопросы для получения дополнительной информации:

Модальное диалоговое окно не закрывает клавиатуру

Контроллер модального вида с клавиатурой на альбомной ориентации iPad меняет местоположение при отклонении

11
задан 4 revs, 2 users 81%BCharles 27 May 2009 в 16:30
поделиться

13 ответов

Да. Другой вопрос, как он будет работать.

Хорошим шаблоном разработки было бы разработать его на чистом питоне, а затем профилировать его и переписать критически важные для производительности узкие места либо на C / C ++ / Cython, либо даже на самом python, но с большим количеством дополнительных компонентов. эффективный код.

15
ответ дан 3 December 2019 в 00:41
поделиться

Хотя я не знаю всех технических деталей World of Warcraft, я бы сказал, что MMO такого размера может быть построена на Stackless Python .

EVE Online использует его, и у них есть один сервер на 200 000 пользователей.

14
ответ дан 3 December 2019 в 00:41
поделиться

Технически все возможно на любом языке программирования Turing Complete.

На практике вы столкнетесь с проблемами при создании сетевого стека из языка высокого уровня, потому что серверу придется Будьте ОЧЕНЬ быстрыми, чтобы справиться с таким количеством игроков.

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

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

Теперь какой-то гуру Python собираюсь вылезти из дерева и оторвать мне голову, потому что,

8
ответ дан 3 December 2019 в 00:41
поделиться

Игра Minions of Mirth - это полноценная MMO, более или менее похожая на WoW, и была сделана в основном на Python . На стороне клиента использовался движок Torque Game Engine, написанный на C ++, но серверный код и поведение были полностью на Python.

7
ответ дан 3 December 2019 в 00:41
поделиться

Да, вы можете написать это на ассемблере, или на Java, или Python, или ебать мозги. Просто сколько времени вы готовы потратить на это. Языковая производительность больше не является большой проблемой, это больше о том, какие алгоритмы вы используете, а не о том, какой язык вы используете.

6
ответ дан 3 December 2019 в 00:41
поделиться

Since your main question has already been answered well, I'll answer your latter questions:

Would the GIL post a major issue on 3d client performance?

In Python 2.6, the multiprocessing library was introduced, so you can take advantage of multiple processor cores without worrying about the GIL. Stackless Python also has some pretty cool related stuff.

And what is the general performance penalty for using say, OpenGL or DirectX bindings vs natively using the libraries?

I don't have any benchmarks to back it up, but the penalty for using the bindings vs. the native libraries is small enough that you don't need to worry about it.

6
ответ дан 3 December 2019 в 00:41
поделиться

Поскольку Python интерпретируется, это приведет к снижению производительности, в отличие от C / C ++, но вы бы хотели использовать что-то вроде PyOpenGL вместо DirectX, хотя, для работы в других операционных системах.

Но я не понимаю, почему вы не можете написать такую ​​игру на Python.

0
ответ дан 3 December 2019 в 00:41
поделиться

Just because it might give an interesting read, Civilization is partly written using Python. A google on it returns interesting reading material.

2
ответ дан 3 December 2019 в 00:41
поделиться

There are some additional real industry examples in addition to Eve Online. The server backend on the Ultima Online 2 project at Origin in the late 90's was mostly Python over a C++ server infrastructure, and the late Tablua Rasa game from NCSoft (with most of the same dev team) had the same architecture.

The Twisted Matrix python server framework was created originally with this exact goals - actually from a developer on the UO2 project at the time, and there was a company called Ninjaneering that attempted to commercialize that code-base through MMO projects.

There has been a move towards lua as a scripting engine (eg EQ2) as is easier to embed and instance.

The problems with python in this environment tend to be in the interface between languages. When you do the inevitable optimization of moving some high performance system from python to C/C++, then pushing data back and forth across language boundaries and calling functions across language boundaries becomes an issue. The cost of serialization can be high if done poorly. For example, using early versions of SWIG would serialize pointers into their string representation and then parse the string back into a pointer on the other side!!

Check out this paper from the mid-90's:

But, in the long term, i think it is possible.

6
ответ дан 3 December 2019 в 00:41
поделиться

Python не интерпретируется - он токенизируется / «вовремя» байт-код «интерпретируется», и у него нет виртуальной машины, как у Java. Это означает, что по-английски это может быть daaaaaamnfast. Однако не всегда, это зависит от проблемы и библиотек, но python не медленный, это распространенное заблуждение даже среди знающих людей (включая тех, кто занимается глубокими Java-движками, которые просто не ушли и пробовал python).

0
ответ дан 3 December 2019 в 00:41
поделиться

Ответ на ваш конкретный вопрос, я думаю, звучит так: "... в чистом Python ... "ответ - НЕТ.

Python недостаточно быстр, чтобы вызвать OpenGL или DirectX достаточно эффективно, чтобы воссоздать World Of Warcraft с приемлемой частотой кадров.

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

5
ответ дан 3 December 2019 в 00:41
поделиться

Я пробовал свои силы в написании 3D-игр на Python, и, учитывая хорошую структуру рендеринга (мой любимый - OGRE) и приличные привязки, удивительно, что вы можете избежать неприятностей. Однако, особенно в играх, вы всегда пытаетесь выжать из оборудования как можно больше. Недостаток производительности python в конечном итоге даст о себе знать.

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

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

4
ответ дан 3 December 2019 в 00:41
поделиться

As a technologist I know:

If it can be written in C\C++ it can be written in assembly (though it will take longer). If it can be written in C\C++ and is not a low-level code - it can be written in any managed environment. WoW is a high-level program that is written in C\C++ python is a managed environment

There for: WoW может быть написан на python, как и любая другая MMORPG в 3D ...


Самой сложной частью будет 3D-движок, потому что это самая «тяжелая» часть кода - вам нужно будет использовать сторонний движок (написанный на C \ C ++ \ Assebly) или написать его и оптимизировать (не рекомендуется)

2
ответ дан 3 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

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