PDA

Просмотр полной версии : gamedev на flash vs C++


progman
12.09.2009, 18:30
камрады, просветите плизз по поводу возможности использования флешы для разработки игр.
интересует производительность.

к примеру:
изометрическая 2Д стратегия.
размер карты в 10 раз больше видимой области: предположительно экран 800х600.
несколько тысяч юнитов:
- пара сотен с растровой анимацией и
- все остальное статические: деревья, здания и пр...

террайн тайловый. собирается из тайловых клеток. вся мапа 256х256 клеток. в экран умещается область 25х25 клеток.

начал писать на своем изометрическом движке на С++, но задумался в сторону флеши ибо потом есть намерение попробовать её пристроить в какую нить социальную сеть. для winapp будет сделать это на порядок сложнее.

зы конечно не стракрафт будет но в принципе в первом приближении можно сказать что 50% от старкрафта по сложности и геймплею.

CEBEP
12.09.2009, 21:59
флешы, флеши - в мемориз...

etc
13.09.2009, 00:39
Производительность будет низкая. Очень. Особенно по сравнению с cpp.

progman
13.09.2009, 12:02
Производительность будет низкая. Очень. Особенно по сравнению с cpp.
насколько низкая?

возможно ли оптимизация: к примеру не рисовать то что не в frustum.

VVall
13.09.2009, 12:22
Какой frustum в 2D? Проблема не в том, чтобы не рисовать то, что не в кадре (это само собой разумеется), а в том, что Flash выводит всё чисто программно, не используя аппаратное ускорение, и в том, что AS значительно медленнее, чем код на C++ или Pascal.

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

progman
13.09.2009, 13:25
Какой frustum в 2D? Проблема не в том, чтобы не рисовать то, что не в кадре (это само собой разумеется), а в том, что Flash выводит всё чисто программно, не используя аппаратное ускорение, и в том, что AS значительно медленнее, чем код на C++ или Pascal.

как тогда оптимизация происходит - как не рисуется то чего не попадает в экран?


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

etc
13.09.2009, 13:29
насколько низкая?
На порядок, примерно. Рендер у флеша крайне медлителен. А без обрезки у вас и так ничего не заведется.

VVall
13.09.2009, 13:36
как тогда оптимизация происходит - как не рисуется то чего не попадает в экран?
Даже не знаю, как ответить. Ну вот так и не рисуется, если определено, что не попадает. Я о том, что frustum, который пирамида видимости - это для 3D, а в 2D плоскость.

поиск пути как раз не проблема.
То есть, вы точно знаете, что достаточно быстрый для RTS (как я понимаю из упоминания Starcraft) поиск пути для тысяч юнитов на Flash не проблема? Тогда о чём вы спрашиваете в этой теме вообще?

progman
13.09.2009, 16:31
Даже не знаю, как ответить. Ну вот так и не рисуется, если определено, что не попадает. Я о том, что frustum, который пирамида видимости - это для 3D, а в 2D плоскость.


к примеру: качнул книгу "Секреты разработки игр в Macromedia Flash MX"
там есть пример изометрии 10х10 клеток и существо по ним бегает. запустил - всё шутсро бегает.
влез в код и поставил 200х200 и всё сдохло, фпс где то в районе 1 кадр в минуту.
я о такой производительности говорю. 200х200 клеток это вывод 4000х тысяч тайлов. из них четверть гарантированно попадает в область видимости ( frustrum по инерции ее называю ). Флеша я до сиго момента касадся пару раз и очень поверхностно и тонкостей не знаю.
У себя в с++ движке Я контролирую порядок отрисовки и я решаю что рисовать а что не рисовать, в флеше я вообще ничего похожего на функцию render() не нашел :-)
и моск не понимает как там вообще все рисуется. тупо вообще все что есть на сцене или как то можно таки оптимизировать и перед отрисовкой управлять контентом - это рисуем а это нафиг ибо вне зоны видимости?

VVall
13.09.2009, 17:12
Если у вас AS3 и растровая графика, то вывод лучше делать через copyPixels, то есть через копирование прямоугольников из одного изображения в другое. В итоге всё копируется на единственное изображение, находящееся на сцене. Это отдалённо напоминает direct draw, и вы будете контролировать, что, куда и сколько рисовать. Можно почитать здесь (http://www.8bitrocket.com/newsdisplay.aspx?newspage=6077) (там много статей на эту тему).

iflamberg
13.09.2009, 17:46
забейте на флеш. Производительность ниже, чем у сеги. Двадцать персонажей, перемещающихся по 2000 клеткам реалтайм, убивают напрочь, несмотря на все оптимизации, начиная от кеширования, использования пулов, поиска пути в несколько приближений, и заканчивая алхимией. Нет, вру, на самом деле, алхимию я таки не попробовал. Но реально, это же ужас, что при таких мощностях процессора, при программировании приходится заморачиваться, будто пишешь для 80286. А если к этому добавляются эффекты с графикой (партиклы, эффекты на DisplacementMapFilter) - все дохнет, как бы ты не заморачивался.

Опять же стратегия без правой кнопки мыши - довольно неудобно.

Я думаю, максимум флеша - пошаговая изометрия в стиле warlords или x-com 1,2,3. С упрощенным AI.

progman
13.09.2009, 18:09
VVall спасибо - то что дохтор прописал!

etc
13.09.2009, 18:15
Я думаю, максимум флеша - пошаговая изометрия в стиле warlords или x-com 1,2,3. С упрощенным AI.
Ну и ещё 3D с микробаттлграундом и изометрические же MMORPG. И то, с натягом при хорошем железе.