barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

суббота, 15 сентября 2012 г.

Проект away3d 4.0 в Flash Builder 4.6: пустой экран и ошибка "Класс Context3D недоступен"

Проблема:

Создал ActionScript-проект в Flash Builder 4.6, подключил сорцы away3d 4.0, но при запуске даже элементарных примеров с away3d.com получаю пустой экран и ошибку (если установлен отладочный Flash Player):
Error #2044: Необработанный ErrorEvent:. text=Error #3702: Класс Context3D недоступен.
Решение:

Открыть html-шаблон, который используется для запуска проекта, и установить в нем параметр wmode равным "direct" в JavaScript-коде создания swf-объекта:

<script type="text/javascript">
            // For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection.
            var swfVersionStr = "${version_major}.${version_minor}.${version_revision}";
            // To use express install, set to playerProductInstall.swf, otherwise the empty string.
            var xiSwfUrlStr = "${expressInstallSwf}";
            var flashvars = {};
            var params = {wmode: "direct"};
            params.quality = "high";
            params.bgcolor = "${bgcolor}";
            params.allowscriptaccess = "sameDomain";
            params.allowfullscreen = "true";
            var attributes = {};
            attributes.id = "${application}";
            attributes.name = "${application}";
            attributes.align = "middle";
            swfobject.embedSWF(
                "${swf}.swf", "flashContent",
                "${width}", "${height}",
                swfVersionStr, xiSwfUrlStr,
                flashvars, params, attributes);
            // JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.
            swfobject.createCSS("#flashContent", "display:block;text-align:left;");
        </script>
Это включит аппаратное 3D-ускорение. Предыдущие версии библиотеки работали с другими wmode`ами (transparent, opaque), что, конечно, давало проигрыш в производительности, но всё же. У wmode=direct есть одна особенность: объекты View3D всегда располагаются под остальным 2D-контентом, независимо от порядка их добавления в контейнер вызовом addChild и от индекса при добавлении с помощью addChildAt. Так что нужно быть осторожным, чтобы, например, случайно не залить 3d-сцену поверх как-нибудь заливкой.

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

Отправить комментарий