Войти
ПрограммированиеФорумОбщее

C++ and Python (2 стр)

Страницы: 1 2 3 Следующая »
#15
14:46, 25 апр. 2008

grigorag, конкретно мы используем питон. ЛУА - мне не понравился, внедрение перла - показалось мне извращением, остальные - даже не пытался )))
Сам питон меня целиком и полностью устраивает, нареканий никаких (как минимум пока) нет. Первое время были некоторые трудности с внедрением его в движок, но связаны они были лишь с необходимостью изучения boost::python, т.к. документация там, мягко говоря, не очень. Но как только боле-мене подразобрался - всё пошло как по маслу. На данный момент питоном скриптуется почти весь GUI, часть сети, настройки движка и (частично) работа с менеджерами объектов, моделей, текстур, шейдеров и материалов - как уже сказал, пока всё вполне устраивает.


#16
20:34, 26 апр. 2008

zlos
>Balde Of Darkness, летавшая на GeForce2 и имевшая честное освещение, почти
>целиком написана на Питоне. Вопрос прямоты рук.

Графический движок написан там на С.
И летала она не из-за прямых рук. А из за очень маленького количества полигонов и ограниченого количества противников в кадре. Обычно не больше одного, и сделано это специально.
Зато если умудришся двоих-троих вывести на одну линию удара, сразу фпс падает до 1 кадра в секунду. Подозреваю как раз из-за Питона.

#17
1:43, 27 апр. 2008

DDragon, я давно не играл в БоД, но, насколько я помню, сражаться с 2-3 противниками одновременно - там почти норма, по крайней мере с двумя. И тормозов я, честно говоря, там ни разу не видел вроде (играл когда игра только вышла), местами были только ОЧЕНЬ редкие провалы фпс на долю секунды.

Прошло более 3 лет
#18
23:36, 13 июня 2011

Вопрос по теме.

Хочу писать игру с заклинаниями, где последние будут реализовыватся скриптами на Python. Насколько я понимаю, это правильная идея. Я ещё мало освоил Python и Boost, но мне видится следующая проблема.

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

Ещё раз, может быть, я мало разобрался, но скажите, не будет с этим никаких проблем? Или я неправильно ставлю задачу?

#19
10:35, 14 июня 2011

Объекты из C++ легко протягиваются в питон. Это можно делать даже без каких-либо дополнительных инструментов. Прилагаемая к питону библиотека содержит удобные инструменты. Если вам их не хватит, можно использовать boost.python, но использовать его не обязательно.

#20
12:00, 14 июня 2011

Zab
Но ведь это только embedding. А мне нужно в обе стороны, да чтобы C++ сторона была одна и та же.

Ещё раз:
Активность заклинания, обрабатываемого скриптом на Python'е, должна вызываться из C++. С этим нет вопросов. Но дальше код скрипта должен проходиться по всем существам, чтобы проверять попадание последних в область эффекта. И вот здесь в полный рост встает вызов C++ из Python. Да не просто вызов, а вызов функций той же программы, что сама вызвала скрипт.

#21
12:30, 14 июня 2011

У меня весь двиг построен на Cpp + Python (через pybind)

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

C++
==============
PythonCoreFramework
PythonMiddleFramework
PythonGameFramework
==============
Exel

^_^

#22
13:39, 14 июня 2011

Zab
> Но ведь это только embedding. А мне нужно в обе стороны, да чтобы C++ сторона
> была одна и та же.

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

Можно сделать так, чтобы и питоновские объекты сохранялись от вызова к вызову. Для этого надо не создавать питон-машину каждый раз, а пользоваться старой. Но если есть желание, можно старую уничтожить, создать новую. Все зависит от потребностей.

#23
23:33, 16 июня 2011

Что-то туго идет освоение этого Extending'а. Раздел "Building C and C++ Extensions on Windows" Из Python documentation еле-еле выполняется, сыпет ошибками и как самому его собрать, непонятно.

#24
13:50, 19 июня 2011

Смотрю в документацию, вижу фигу. Вернее я вижу, extending, embedding, организацию callback, а как их объединить не понимаю. Подскажите что ли раздел в Manual'е или статью почитать.

Спасибо.

#25
9:32, 20 июня 2011

Да простят меня модераторы за ссылки, но вот запостил в другом разделе тему. Смысл там такой:

Нужно ли реализовывать анимацию заклинаний тоже на уровне Python и не сильно ли это скажется на производительности?

Подробности http://www.gamedev.ru/code/forum/?id=148921

#26
7:36, 22 июня 2011

Вроде добил вчера extending и embedding. Удалось протащить вызов из C в Python  и дальше обратно в C.

Но насколько я понял в Python C API не существует способа экспортировать в Python метод C++  класса.

Поэтому взялся за Boost (Boost.Python) Намучался с его построением, с этим bjam. Кое как построились библиотеки, но они все равно не хотят использоваться ни bjam'ом, ни Visual Studio для построение quickstart'ов и tutorial'ов. Смотрю интернет, смотрю мейл-листы: куча подобных жалоб, никто толком подсказать решение не может.

Беда...

#27
8:14, 22 июня 2011

На всякий случай, если кто-нибудь здесь разбирается, единственная ошибка, которая у меня возникает и в Visual Studio, и при использовании bjam при построенении

#include <boost/python/module.hpp>
#include <boost/python/def.hpp>

char const* greet()
{
  return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}


это

Error  1  error LNK2019: unresolved external symbol "__declspec(dllimport) struct _object * __cdecl boost::python::detail::init_module(struct PyModuleDef &,void (__cdecl*)(void))" (__imp_?init_module@detail@python@boost@@YAPAU_object@@AAUPyModuleDef@@P6AXXZ@Z) referenced in function _PyInit_hello_ext  hello.obj

Я смотрел, в каких библиотеках *.lib содержится init_module@detail@python@boost@@YAPAU_object@@AAUPyModuleDef@@P6AXXZ@Z. В папке %BOOSTROOT%stage\lib\ нашлось несколько таких библиотек

libboost_python-vc90-mt.lib
libboost_python-vc90-mt-1_46_1.lib
libboost_python-vc90-mt-gd.lib
libboost_python-vc90-mt-gd-1_46_1.lib
libboost_python3-vc90-mt.lib
libboost_python3-vc90-mt-1_46_1.lib
libboost_python3-vc90-mt-gd.lib
libboost_python3-vc90-mt-gd-1_46_1.lib

плюс в папке %BOOSTROOT%libs\python\example\tutorial\ (папка с файлом с исходным кодом выше) библиотека

boost_python-vc90-mt-gd-1_46_1.lib

(рядом с которой лежит boost_python-vc90-mt-gd-1_46_1.dll)
Но даже прописывание каждой конкретно библиотеки вместе с полным путем в project properties\linker\input\addiditional dependencies, равно как и указание %BOOSTROOT%libs\python\example\tutorial\ в project properties\linker\additional library directories не дает никакого результата.

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

Will appreciate any help.

#28
10:24, 22 июня 2011

IROV..
Посмотрел pybind. Пока документации к нему не нашел, но он у меня по крайней мере построился почти сразу. Но к сожалению только для Python 2.7 версии. С Python 3.2 уже не захотел. Если ты знаешь, не мог бы дать ссылочки на
1) версию, которая билдится с Python 3.2
2) документацию.
3) или хотя бы пример использования...

... насколько я понял по содерржанию http://sourceforge.net/projects/pybind/ , автор вовсе не ставил себе глобальных целей, в том числе поддерживать поледнюю версию Python и писать документацию. А как ты разбирался в этом pybind'е?

#29
15:42, 22 июня 2011

Братец Тук
Иров легко разобрался) потому что он и есть автор)

Зачем тебе питон 3?

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.