Я понял это. По-видимому, это проблема Papervision3D. Внутри Papervision3D существует класс VirtualMouse
, который должен генерировать MouseEvent
программно. Это происходит, например, когда пользователь взаимодействует с любым из интерактивных объектов на сцене, например, Plane
с интерактивным материалом на нем (как в моем случае).
Проблема в том, что координаты x и y сгенерированного события представляют собой координаты текстуры UV (как я и подозревал), а не координаты экрана реального мира. При перетаскивании TitleWindow
(или любого объекта Panel
) к SystemManager
добавляется обработчик mouseMove (среди прочего), который затем использует свойства stageX
и stageY
объекта события для определить новую позицию окна. К сожалению, для событий мыши VirtualMouse
они недопустимы, поскольку исходные координаты x, y, которые, вероятно, используются для определения глобальных координат сцены, как я уже сказал, не являются экранными координатами .
Честно говоря, я все еще не уверен, используются ли события, отправляемые VirtualMouse
, где-либо внутри самого Papervision3D, или они просто предлагаются для удобства, но они, несомненно, затрудняют интеграцию области просмотра в программу Flex. Предполагая, что такие события не нужны для самого PV3D, для моей проблемы существует однострочное исправление, которое необходимо добавить сразу после создания области просмотра:
viewport.interactiveSceneManager.virtualMouse.
disableEvent(MouseEvent.MOUSE_MOVE);
Кстати, была очень похожая (или, точнее, та же самая) ошибка с перетаскиванием ползунков, также исправленная этой линией.