PDA

Просмотр полной версии : Не работает OBJECT_DOUBLE_CLICK вместе с ViewportLayer


3Desian
03.12.2009, 17:40
Приветствую.
Собсно вопрос в заголовке "Не работает OBJECT_DOUBLE_CLICK вместе с ViewportLayer".
Объекты добавляются в DisplayObject3D и в разные ViewportLayer-ы.
viewport.buttonMode = true;
// Режим сортировки Viewport-ов по индексу
viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT;
// Создаются Viewport-слои и индексируются
ViewportLayer0 = new ViewportLayer(viewport,(new DisplayObject3D()));
ViewportLayer0.layerIndex = 0;

ViewportLayer1 = new ViewportLayer(viewport,(new DisplayObject3D()));
ViewportLayer1.layerIndex = 1;

ViewportLayer2 = new ViewportLayer(viewport,(new DisplayObject3D()));
ViewportLayer2.layerIndex = 2;

// Viewport-слои добавляются во Viewport
viewport.containerSprite.addLayer(ViewportLayer0);
viewport.containerSprite.addLayer(ViewportLayer1);
viewport.containerSprite.addLayer(ViewportLayer2);

// далее фукция создаёт объекты, подписывает их на события и распихивает их в ViewportLayer-ы
public function creator()
{
бла-бла-бла...
object.addEventListener(InteractiveScene3DEvent.OBJECT_DOUBLE_CLICK, objectChanger);
if (objectType=="ground")
{
ViewportLayer1.addDisplayObject3D(object, true);
} else {ViewportLayer2.addDisplayObject3D(object, true);}
}
//затем
public function objectChanger (event:InteractiveScene3DEvent)
{
trace("clic!!!!!!!!!");
}

При двойном клике не работает, если заменить OBJECT_DOUBLE_CLICK на OBJECT_CLICK
всё работает.
Так вот если не пихать объекты по ViewportLayer-ам то и OBJECT_DOUBLE_CLICK работает.
Кто знает почему так и как побороть?

bicubic_bublic
03.12.2009, 18:23
может поможет: ?
object.doubleClickEnabled = true;

3Desian
04.12.2009, 09:30
Не получается т.к. мой Object наследуется от TriangleMesh3D, а метод doubleClickEnabled работает только у объектов класса InteractiveObject.

Добавлено через 7 часов 41 минуту
У кого нибудь есть ещё идеи? А то я в замешательстве. Уж не знаю что и делать ещё. Гуглю, но пока безрезультатно.

SamFR
04.12.2009, 23:17
В крайнем случае можно самому отслеживать двойной клик. Не так уж и сложно делается.

bicubic_bublic
05.12.2009, 04:26
такое чувство что надо соответствующему дисплейобъекту сделать doubleClickEnabled..
только вот найти его не так то легко.. можно покапаться

3Desian
05.12.2009, 17:37
Пристите, не понял... :)
SamFR, Вы предлагаете стейдж подписать на двойной клик?
А в функции objectChanger написать что то вроде:

public function objectChanger (event:InteractiveScene3DEvent)
{if(doubleClickVar == true)
{
trace("clic!!!!!!!!!");
doubleClickVar = false;
}
} Так?
bicubic_bublic, Что за "соответствующий Дисплейобджект"?

bicubic_bublic
05.12.2009, 18:20
думаю так:
viewport.doubleClickEnabled = true;

-----

ну или там
ViewportLayer1.doubleClickEnabled = true;
или
ViewportLayer2.doubleClickEnabled = true;


-----

гланул в исходники пепервижн - действительно в обычном вьюпорте doubleClickEnabled по умолчанию..
package org.papervision3d.view {

public class Viewport3D extends Sprite implements IViewport3D {

...

protected function init():void {

...

_containerSprite = new ViewportBaseLayer(this);
_containerSprite.doubleClickEnabled = true;

...

}

...

}
}

3Desian
07.12.2009, 15:32
Большое спасибо, товарищ.
Сработало. :)