интеграции Magic Particles (Dev) для PopCap Framework

Обсуждение специальной версии Magic Particles (Dev), предназначенной для разработчиков игр.

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение Odin_KG » Вт мар 16, 2010 2:32 am

Получил эмиттер и сравнил.

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

По поводу скорости... в моем случае я не вижу на глаз никаких расхождений - везде одинаково. Но, как я уже говорил, редактор не только рисует частицы, а делает параллельно еще всякие свои штуки, так что некоторое падение скорости воспроизведения вполне логично. В вашем случае я заметил такую вещь - Частота обновления = 60. Это говорит о том, что редактор будет пытаться обновлять изображение 60 раз в секунду. А в попкап-е у вас частота перерисовки задается попкап-ом. Моя рекомендация: 60 - это неоправданно много для игр, тем более что это просто неоправданно потребляет быстродействие. Не используйте более 30 и у вас эта проблема тут же снимется. Я специально в Dev-версии по умолчанию поставил там 30, а в обычной 60 (для привередливых дизайнеров, которым всегда мало :-) ). Вы видимо делали эффект в обычной версии, а затем перенесли в DEV. По этой теме очень рекомендую свою статью: http://www.astralax.ru/articles/effects_optimization , которая пояснит этот вопрос более подробно.

Правка:
Еще очень рекомендую включить галочку "Интерполяция", подробнее опять же об этом читайте в статье. Возможно, что в данном случае "Интерполяция" даже будет более решающим фактором чем "Частота обновления".
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение KoDeRon » Ср мар 17, 2010 12:52 am

Спасибо за ответ! художники прочитали статью :) и чутка откорректировали партиклы

у меня собственно появилась проблема чутка иного характера

у нас создается атлас для текстур
но у меня в тоже время есть скажем system.ptc который я не хочу каждый уровень грузить в память с нуля
на каждый уровень есть свой ptc файл который в начале уровня грузиться а в конце теоретически должен удаляется ( удаления эмиторов нету :( )

то есть нужно оставить в памяти system.ptc
и выгрузить скажем Ch1Level1.ptc c последующей загрузкой Ch1Level2.ptc

по искав на форуме информацию по удаления эмиторов наткнулся на пост http://astralax.ru/forum/viewtopic.php?f=5&t=154&start=50#p824
в котором предлагается код удаления не нужные эмиторов

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

Код: Выделить всё
MP->LoadTextures(texture_folder,1024,1024,0,0.1f);

MP->CloseFiles();

MP->Stop();


собственно не понятен данный момент и с какой стороны подайте корректно

+ вопрос иницилизации

Есть такой параметр MAGIC_FOREVER
Я правельно понимаю что он берет последние настройки эмитеров и повторяет их до бесконечности.

Если так удобная фича но если бы можно было бы присваиваться эмиторам а не всей системе сразу.
KoDeRon
 
Сообщения: 13
Зарегистрирован: Вт мар 02, 2010 6:50 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение Odin_KG » Ср мар 17, 2010 2:34 am

но у меня в тоже время есть скажем system.ptc который я не хочу каждый уровень грузить в память с нуля

К сожалению, сейчас атлас создается только со всех загруженных эмиттеров сразу. MP_Manager сейчас практически может существовать только в одном экземпляре. Есть вероятность, что в новой версии API я добавлю возможность построения атласа с выбранных эмиттеров. По крайней мере, я понимаю, что это необходимо сделать для снятия этого важного вопроса.

на каждый уровень есть свой ptc файл который в начале уровня грузиться а в конце теоретически должен удаляется

Вы можете, конечно, строить текстурный атлас руками используя данные из MAGIC_TEXTURE - там вся информация есть, но, честно говоря, я бы на вашем месте, на это забил и спокойно бы создавал MP_Manager заново на каждом уровне и загружал бы его нужными эмиттерами. Т.е. экономить на загрузке 0,3 секунды не имеет смысла. Хотя... зависит, конечно, от количества спецэффектов. Можно еще попробовать построить все атласы заранее (до игры), записать их в PNG, а потом грузить нужные PNG без построений на каждом уровне. Но вам придется текстурные координаты для частиц тоже сохранять отдельно, чтобы не вызывать перестроение атласа через API.

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

Создастся корректно, но... он всё равно с нуля создастся, т.е. вам придется старые атласы-текстуры удалить, а новые построить полностью, т.е. операция эта достаточно бессмысленна, как мне кажется, Лучше удаляйте полностью MP_Manager.

Есть такой параметр MAGIC_FOREVER
Я правельно понимаю что он берет последние настройки эмитеров и повторяет их до бесконечности.

Да, но обычно больше подходит MAGIC_LOOP.

Если так удобная фича но если бы можно было бы присваиваться эмиторам а не всей системе сразу.

Конечно, можно присваивать выборочно через Magic_SetLoopMode. Я рекомендую ознакомится со справкой по API, которая находится в файле API.chm. Враппер же служит лишь минимальной оберткой, чтобы начать работать.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение KoDeRon » Ср мар 17, 2010 11:27 am

спасибо за ответ.

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

было бы неплохо вставтиь в редактор, методы анимации loop, noloop, forever :twisted:
KoDeRon
 
Сообщения: 13
Зарегистрирован: Вт мар 02, 2010 6:50 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение Odin_KG » Ср мар 17, 2010 11:33 am

спасибо за ответ.

пожалуйста

было бы неплохо вставтиь в редактор, методы анимации loop, noloop, forever :twisted:

В редакторе этим методам вроде бы делать нечего. Если вам хочется просто "флажок" иметь, то используйте для этого имя эмиттера. Например, имена зацикленных эмиттеров начинайте с символа "!", а в API проверяйте на первый символ имени и зацикливайте.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение KoDeRon » Ср мар 17, 2010 12:53 pm

как вариант да, но иметь галочку в редаторе вроде удобнее :twisted:

код врапера чутка подправил от зависимостей примера могу выслать если интересует :)
KoDeRon
 
Сообщения: 13
Зарегистрирован: Вт мар 02, 2010 6:50 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение KoDeRon » Ср мар 17, 2010 12:58 pm

Также чисто косметически немогли бы вы подписывать длл версией чтобы понятно какая версия длл :)
KoDeRon
 
Сообщения: 13
Зарегистрирован: Вт мар 02, 2010 6:50 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение Odin_KG » Ср мар 17, 2010 3:11 pm

как вариант да, но иметь галочку в редаторе вроде удобнее

Редактор же не для игр, а для дизайнеров - игры это лишь дополнительное направление.

код врапера чутка подправил от зависимостей примера могу выслать если интересует

Спасибо, но, думаю, нет смысла. Я всё равно сейчас общий враппер исправлять не буду - это хлопотно.

Также чисто косметически немогли бы вы подписывать длл версией чтобы понятно какая версия длл

Я не знаю как в CodeBlocks-е номер версии выставить, а разбираться лень.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение KoDeRon » Вт мар 23, 2010 8:30 pm

Возникла проблема

magic.dll!6a5b6e90()
[Frames below may be incorrect and/or missing, no symbols loaded for magic.dll]
magic.dll!6a5b7cb2()
magic.dll!6a5c7940()
magic.dll!6a5b8baa()
ntdll.dll!7c960bcc()
> Nemo_debug.exe!_CrtIsValidHeapPointer(const void * pUserData=0x00b2b648) Line 2072 C++
Nemo_debug.exe!_unlock(int locknum=175190136) Line 376 C
00000001()

падает неизвестно начем, помойму на
Magic_CreateAtlases(atals_width, atlas_height, frame_step, scale_step);

ибо до етого все проходит нормально...

падает рандомно но особено ето видно когда создаеться очень много партиклов 20+ эмитеров по 50+ партиклов
и в етот момент нажать на переход уровня,

происходит

Код: Выделить всё
void ManageMagicParticle::Destroy()
{
   if(MP == NULL)
      return;

   delete MP;
   MP=NULL;
}


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

Код: Выделить всё
void ManageMagicParticle::Init()
{
   MP=new MP_Manager;

   if(MP == NULL)
      return;

   const char* temp_folder=GetPathToTemp();
   MP->Initialization(MAGIC_INTERPOLATION_ENABLE, MAGIC_LOOP, MAGIC_CHANGE_EMITTER_ONLY, temp_folder);

   MP->LoadEmittersFromFile(StrFormat("%s%s",mConstPath.c_str(),mSystemParticle.c_str()).c_str());
}

void ManageMagicParticle::AddLevelParticle( const std::string& name )
{
   if(MP == NULL)
      return;

   MP->LoadEmittersFromFile(StrFormat("%s%s",mConstPath.c_str(),name.c_str()).c_str());
}

void ManageMagicParticle::CreateTextureAtlas()
{
   if(MP == NULL)
      return;

   /// загружаем текстуры
   std::string texture_folder= "Data\\Magic Particle\\Texture\\";
   MP->LoadTextures(texture_folder.c_str(),1024,1024,0,0.1f);

   /// закрываем файлы
   MP->CloseFiles();

   /// останавливаем все партиклы
   MP->Stop();

   MP_Emitter* emitter=NULL;

   // расставляем эмиттеры также, как они стояли в редакторе
   int k_emitter=MP->GetEmitterCount();
   float cx=((float)gSexyAppBase->mWidth)/2.f;
   float cy=((float)gSexyAppBase->mHeight)/2.f;

   std::string mName;
   for (int i=0;i<k_emitter;i++)
   {
      emitter=MP->GetEmitter(i);
      MP_POSITION pos;
      emitter->GetPosition(pos);

      mName = emitter->GetEmitterName();
      pos.x=pos.x+cx;
      pos.y=pos.y+cy;
      emitter->Move(pos);

      if(mName[0] == '!')
         Magic_SetLoopMode(emitter->GetEmitter(),MAGIC_NOLOOP);
   }
}


возможно нехватает время на очистку всего щас вставлю sleep(50);
перед начало создания уровня но вы посматрите, мб я чо делаю не правельно...

P.S.
падает даже когда заходит на уровень без партиклов а потом с него на уровень с партиклами идет переход...
падает не стабильно, и точно сказать нельзя когда......

может ли быть эта проблема в самих ptc файлах ?!

Убрал начала проигрывания партикла 1. игра в место падения тупо начала зависать и уходить в даун аля бесконечный цикал включился гдето...

P.S. № 2 :)

падает все равно также, ето я пару запусков в релизе тестил...
KoDeRon
 
Сообщения: 13
Зарегистрирован: Вт мар 02, 2010 6:50 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение Odin_KG » Ср мар 24, 2010 3:39 pm

Мне трудно тут что-то посоветовать. С виду вроде всё правильно.

возможно нехватает время на очистку всего щас вставлю sleep(50);

У вас там многопоточность что-ли? Вообще библиотека не рассчитана на работу в режиме многопоточности, т.е. библиотека должна работать полностью на одном потоке, на другом можете делать что угодно.

может ли быть эта проблема в самих ptc файлах ?!

Нет. На magic.dll периодически выходят коммерческие проекты - меня бы давно претензиями завалили.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Пред.След.

Вернуться в Magic API

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

cron