|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
|
|
Нормально ли это?14.01.2014, 05:38. Показов 1569. Ответов 8
Метки нет (Все метки)
Делаю свою игру. 2D графика. жанр РПГ. Карта состоит из квадратов 44х44 пикселя
Рисую при попощи sprite.Draw(Textures, vector3, vector3, Color); текстуры для игры лежат в двух массивах битмапов в одном лежит 1000 битмапов в другом около 10000 битмапов общий размер битмапов 70мб (или 20 мб если использовать PNG формат) Проблемав том что при отрисовке на экране 1500-2000 таких битмапов размером 44х44 FPS падает до 20 Нормально ли такая скорость или уменя гдето проблемы в коде??? как можно ускорить прогу? какой формат лучше использовать для текстур??
0
|
|
| 14.01.2014, 05:38 | |
|
Ответы с готовыми решениями:
8
2048 отдельных квадрата (меши, сетка) - частота кадров падает до 7 к/с - это нормально? Это нормально? Это нормально? |
|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
|
|
| 16.01.2014, 22:29 [ТС] | |
|
ПОмогите Нубу!!!!!!!!
Писал игру с нуля без движков. Сделал даже редактор карты, осталось только дописать пару класов для предметов . а там уже заняться ИИ. Короче как я считаю половина работы уже сделано НО тут ОКАЗАЛОСЬ что FPS недопустимо мало =(( Помогите ПЛИЗЗ!!!!! советом, литературой, добрим словом, хоть чемнибуть. Потратил очень много времени и теперь жалко вот так это все забросить. КАк пожно увеличит FPS?? (любые советы хорошы ибо я нуб и с директов на ВЫ) читал тут про сокращение DIP'ов но я чесно говоря непредстваляю как в 2D с изометрией можно их сократить. Все квадраты отрисовываются в строгой очереди - от дальних к ближнему. Так что это уже 1500 Dip'ов
0
|
|
|
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
|
||||||
| 17.01.2014, 07:46 | ||||||
|
А ты кол-во текстур отрисовывай относительно расстояния . к примеру ты находишься в начале Уровня, зачем тебе отрисовывать те что по середине и те что вконце?
К примеру можно так:
Если подкоректировать условия, то моно ещё по y сделать проверки, если у тебя ещё она и в высь сделана. Это мой вариант, сам делаю 2D игру, я делаю так.
0
|
||||||
|
61 / 54 / 21
Регистрация: 19.10.2013
Сообщений: 117
|
||
| 17.01.2014, 20:43 | ||
|
Немного уточним термины(MDX).
Microsoft.DirectX.Direct3D.Texture - текстура - это то, что уже лежит в ОЗУ 3D ускорителя. Microsoft.DirectX.Direct3D.Sprite - фрагмент текстуры который будет отрисован в задний буфер. System.Drawing.Bitmap - растровое изображение, которое лежит в основном ОЗУ. Скорость отрисовки спрайтов, из уже загруженных текстур в задний буфер огромна. Ваши 2000 * 44х44 для любого ускорителя - ничто. Однако, судя по: Рекомендации: Загружать все текстуры один раз при старте приложения, смене уровня или локации. Объединять мелкие растровые изображения в большие(64х64 * 1024 = 2048х2048) и, сответственно, хранить на диске меньше файлов, создавать и грузить меньше текстур. У метода sprite.Draw() есть перегрузка для вывода небольшого прямоугольного фрагмента текстуры. Sprite.Draw(Texture,Rectangle,Vector3,Ve ctor3,Color)
0
|
||
|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
|
|||
| 19.01.2014, 00:47 [ТС] | |||
|
У меня с эти мпроблем нет, колега =))) Отрисовываю только клетки которые вокруг персонажа, причем умудрился даже несмотря на изометрию рисовать ровно по границам экрана через хитрый цыкл. вобщем ни одной лишней клетки не рисую. Добавлено через 51 минуту про атласы я узнал совсем недавно, поэтому все текстуры были по одному. в итоге получилось что-то вроде 12000 текстур восновном размером 44х44 . ХЗ может ли быть что это все непоместилось в видеопамять с учетом дикого количества текстур или их размера??? Насчет атласов есть идея сделать динамический сборщик атласовю Чтобы все что отрисовывается на экран хранилось в одном атласе. При удалении или добавлении новых обектов в поле зрения в атласе просто добовляется или удаляется текстура в соответствующих координатах. или на худой случай создается новый атлас. Поидее персонах ходит со скоростью около 2-4 клеток в секунду. так что при беге атлас придется коректировать несколько раз в секунду Имеет ли это смысл??? Шустро ли происходит создание и перерисовка новой текстуры/Атласа. Особено если это будет большой атлас на 1024х1024 или 2048х2048. Тоесть лучше использовать одну большую текстуру или несколько поменьше???? А также Имеет ли смысл пихать в текстуру вместо PNG DDS????? Я вычитал это нетолько сократит объем памяти но и немного увеличет FPS. Но я все еще сомневаюсь. проверил несколько рисунков цвета вроде не сильно попортятся но разница есть.
0
|
|||
|
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
|
|
| 19.01.2014, 09:41 | |
|
Конечно Лучше одну большую.
Вот к примеру моя текстура. http://puu.sh/6q4Sd.jpg Я просто вырезаю нужные мне фрагменты из неё. Она размером 3878х2220 вроде. И с этого рисунка я отрисовываю не одну бочку а 30 на уровне. Не буду же я , загружать 30 раз я эту бочку. + к этому, у меня там около 20 юнитов бегают, у которых текстуры с анимациями то же по 1200х1000 и вырезаю для анимации каждый фрагмент. У меня фпс 60 СТАБИЛЬНО.
0
|
|
|
61 / 54 / 21
Регистрация: 19.10.2013
Сообщений: 117
|
||||||
| 19.01.2014, 14:17 | ||||||
|
SpriteBatch в XNA примерно тоже самое что Spritе в MDX.
Здесь маленькая статья по-русски про оптимизацию SpriteBatch. http://www.xnadev.ru/articles.php?article_id=108 Еще попробуйте:
0
|
||||||
|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
|
||
| 19.01.2014, 19:50 [ТС] | ||
|
К сожалению у меня отрисовать сразу все бочки за раз невозможно=(( у меня строгая последовательность рисования по клеткам от верхего правого угла и диагональными полосами вниз Мне нужно полностью отрисовать всю первую клетку с землей деревьями и мобами , потом вторую итд иначе получится бардак. А вот насчет атласов. какой максимальный размер атласа ?? У меня все в один атлас запихать явно неполучится. 1 атлас для всякой там статической фигни ( 12000 текстур средним размеров +- 44/44 я могу запихать в атлас 2200х2200) Плюс анимация мобов 5 действий по 10 кадров на каждое в восьми направлениях = около 400 картинок размером размером около 50х140 получается что на анимацию моба еще один атлас размеров примерно 1800х1800 для отрисовки каждой клетки на которой находится моб придется переключатся от атласа с статикой к атласу с мобом а на следующей клетке обратно к атласу со статикой. Я в Этом деле новичек, как там работает видяха и директ вообще понятия не имею. Поэтому вот опасаюсь не будетли частое переключение между этими громадными текстурами медленым??? способна ли ведяха держать в своей памяти одновремено несколько текстур и если да но столько и каких размеров??? Ну возможноли управлять этими атласами непосредственно в видеопамяти (например что нибуть типа Bitmap.LockBits() и переписать в атласе небольшой ректангл а не пересоздавать его заного, )
0
|
||
|
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
|
|
| 09.02.2014, 11:42 | |
|
откуда взялось число текстур 12000?
![]() Такое ощущение, что подавляющее большинство дублируется. Почему размер текстур 44х44? Размер по каждому измерению должен быть кратен степени двойки. 2, 4, 8, 16, 32, 64...
0
|
|
| 09.02.2014, 11:42 | |
|
Помогаю со студенческими работами здесь
9
Это нормально? Нормально ли это? Это нормально? Это нормально?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|