Форум » Общие вопросы по WME » WME и тормоза... » Ответить

WME и тормоза...

Spawn: Ситуация такая. На сцене несколько анимированных (looping) объектов (entety). Часть активирована, часть нет. В момент, когда я из скрипта активирую неактивные объекты и делаю им PlayAnim или SetSprite, то игра неприятно подтормаживает. Некритично, но впечатление портит безвозвратно. Я так понимаю, что подтормаживает из-за PlayAnim и SetSprite, которые подгружают новые анимации. Как с этим бороться, как сделать так, чтобы при загрузке сцены, были загружены все анимации для объектов на сцене (как например у актера)? Но для объектов все анимации хранятся в независимых sprite, поэтому нигде не связаны. Еще какие есть советы по оптимизации в WME, чтобы ничего не тормозило. А то пара объектов начнет проигрывать анимацию и все подторможивает. Например, когда именно надо ставить галочку streamins у спрайтов. Т.е. по логике получается, что для всех спрайтов с одним кадром она должна стоять.

Ответов - 15

Dionysius: А зачем ты запускаешь анимацию скриптом? Это необходимо? Можно сразу прицепить анимированный спрайт к объекту.

Spawn: Для объекта сделано несколько анимаций. Грубо говоря, анимация проявления, постоянная анимация и анимация исчезания. Я соответственно цепляю за entity эти спрайты исходя из действий на сцене.

Dionysius: Тормоза, скорее всего, происходят из-за большого количества анимированных объектов в сцене. Какие у твоей машины характеристики (видеокарта, процессор, оперативная память)?


Pipec: Возможно тормоза от большого колличества кадров в каждой анимации. Я когда начинал все эти дела ковырять, делал в одной сцене часы с маятником. Так для более плавного хода маятника я делал инимацию 25 кадров/сек. И это была не единственная анимация в сцене. Плюс еще были открывающеся/закрывающиеся ящики стола (тоже 25 FPS), которые открывались/закрывались таким же способом - заменой спрайта. Естественно это все жутко тормозило. Ищи компромисы.

Spawn: В общем я так и думал. Буду резать число кадров и двигать объекты из скрипта. Кстати, а если в анимации много кадров (20-30), но на самом деле оригинальных среди них 3-5, а все остальное движение делаются средствами редактора спрайтов WME?

Spawn: Еще такая мысль появилась. В момент загрузки сцены. Брать все объекты на ней по очереди делать их неактивными, а потом делать SetSprite для всех аниаций, которые этот объект будет испольлзовать. Затем либо оставлять объект неактивным, либо активным. Если я понимаю, то таким образом в память загрузятся все анимации (если он не streaming), а неактивность объекта позволит избежать проигрывания звуков в этих анимациях. Сцена начинается с фейда, поэтому все эти манипцляции будут происходить при черном экране. Это сработает? Или анимация будет подгружаться только, когда объект становится активным?

Dionysius: Лучший ответ - это взять и попробовать

Spawn: Так я хочу точно знать как это работает, а не домысливать

Spawn: В общем самый правильный путь, чтобы не тормозило, это объекты на сцене превращать в актеров, тогда все их анимации будут подгружаться сразу и не будут тормозить.

Spawn: Раз уж эта тема получилась про оптимизацию в WME. Появилс такой вопрос. Я в сцене пишу несколько Scena.LoadActor и когда перехожу на другую сцену, мне надо писать Scena.UnloadObject, чтобы игра выгрузила все ненужное из памяти, или движок делает это автоматически при переходе к другой сцене?

Dionysius: Персонажей надо выгружать вручную.

Spawn: Мне показалось, что при Scene.LoadActor выгружается автоматически при переходе в другую локацию. А при Gamee.LoadActor соответственно надо выгружать.

Dionysius: Хм, ну вообще это логично. А есть метод Scene.LoadActor()? Я обычно гружу с помощью Game.LoadActor()

Pipec: Есть, вот тут я писал об этом. http://wme.forum24.ru/?1-3-0-00000006-000-0-0-1222888067

Dionysius:



полная версия страницы