Доступ к материалам AS3 Papervision3D на плоскости

#flash #actionscript-3 #papervision3d

#flash #actionscript-3 #papervision3d

Вопрос:

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

С места в карьер я установил качество сцены на среднее (если я установлю его на низкое, половина моих видеороликов не будет отображаться). Это помогло, но я хочу большего!!!

Подсказка, которую я прочитал в книге P3D Essentials, заключается в том, чтобы включать анимированные материалы, когда они не нужны. Фантастическая идея, но не объясняет, как.

Когда я создаю материал, который я могу установить material.animated = false , и это работает, но в другой функции я не могу получить доступ к материалам моих примитивов. Что-то такое простое, как plane.material.animated = false возвращает исключение null. Итак, как мне динамически включать / выключать анимированные материалы в моих примитивах?

Комментарии:

1. Проект PV3D мертв. Используйте Away3D.

2. Некоторые доказательства: unitzeroone.com/blog/2009/09/28/goodbye-papervision .

3. Вряд ли это доказательство. Ушел один из основной команды. Однако блог не обновлялся с июля 2010 года, а сайт разработчиков — с июня 2009 года. Код Google был обновлен в марте 2011 года… Я думаю, что взгляну на Away3D для своего следующего проекта, поскольку этот выполнен на 95%.

4. Это доказательство, потому что он был основным разработчиком. Конечно, кое-где что обновлялось, и они запускались в новой ветке, но, возможно, 2 парня комментируют код и т.д. Более 22 активных разработчиков, включая астрофизика из команды away3d, работают ежедневно. Еще одно доказательство: Papervision был практически ЕДИНСТВЕННЫМ движком Flash, который не был приглашен для участия в закрытой альфа-бета-версии molehill. Почему? Потому что Adobe тоже знает, что это, по сути, мертвый проект. 🙂

Ответ №1:

При просмотре API это кажется невозможным. Что я могу сделать для повышения производительности, так это удалить объекты, которые не видны, например, если плоскость полностью скрыта за другой плоскостью, тогда не показывайте (визуализируйте) ее. Это то, чего я пытался достичь с помощью моего первоначального вопроса…

Все мои плоскости хранятся в массиве.

 //make all the planes invisible. Don't want to render them
for(var i = 0; i< planes.length(); i  )
{
  planes[i].visible = false;
}
//show the first plane so we have **something** to see
planes[0].visible = true;
  

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