- Про що тут?
- Що потрібно?
- Загальна структура віртуального туру на krpano
- Обмеження області видимості елементів туру. Атрибут keep
- Реалізації заставки до віртуального туру
- Створення кнопок управління панорамами в віртуальному турі
- Всі статті по роботі з krpano
У цій статті продовжимо роботу над віртуальним туром і більш докладно зупинимося на його структурі.
Про що тут?
У минулому уроці ми створили найпростіший віртуальний тур: 2 панорами, 2 точки переходу. Тут ми продовжимо роботу над попереднім туром: додамо вже раніше створену для окремої панорами заставку, логотип і кнопки управління панорамою.
Крім цього розглянемо обмеження області видимості елементів туру і дізнаємося як їх використовувати.
Але перед тим як переходити до більш складним елементам варто розглянути загальну структуру коду віртуального туру.
Що потрібно?
Для цього уроку будуть потрібні ті ж самі матеріали, що і для 4 уроки.
Повний список матеріалів для 4 і 5 уроку >>
А також будуть потрібні всі напрацювання, які ви зробили по уроку 4. Робота в даній статті буде з кодом, отриманим в попередній статті.
Загальна структура віртуального туру на krpano
Тут пропонується загальна схема щодо простого туру, яка вирішує наступні завдання:
* Позбутися від ідентичного коду в різних ділянках туру
* Створення умов, коли в тур можна легко вносити зміни і просто управляти окремими його елементами
* Створення універсального коду, ділянки якого в майбутньому можна використовувати в наступних турах.
Загальний спрощений вид структури віртуального туру
Слід зазначити, що зі зростанням складності віртуального туру розростається і структура. Виділяються нові блоки, а код туру вже розподіляється на безліч xml-файлів. Але зараз розглянемо спрощену структуру.
* Блок плагінів - тут оформляються всі плагіни додаткових матеріалів віртуального туру (зображення заставок, логотипів, і т.д.).
* Блок глобальних подій. В даному блок прописується код, який відповідає за глобальні події та загальних налаштувань туру (наприклад, включити \ вимкнути на старті авторотацію)
* Блок екшенів - тут розташовуються всі екшени віртуального туру.
З них виділяється екшен налаштувань, в якому прописуємо основні настройки віртуального туру. Цей екшен відповідає за створення певних змінних, які застосовуються в турі та присвоєння їм стартових значень. Так само часто з цього екшену відбувається виклик інших екшенів, які відповідають за налаштування елементів туру. Наприклад, можуть викликатися створені екшени які масштабують кнопки виходячи з дозволу екрану.
Також тут виділяється стартовий екшен сцен, який запускається при старті кожної сцени і виробляє її настройку. Наприклад, в цей екшен виводяться функції показу тексту назви панорами. Тобто це ті функції які треба виконувати для всіх сцен на старті. Цей код виводиться в окремий екшен, щоб не дублювати його в кожній сцені, і більш просто управляти завантаженням елементів сцен.
Екшен налаштувань і стартовий екшен сцен це логічні блоки, тобто немає необхідності їх оформляти особливими тегами. Вони покликані в складних турах спростити роботу з кодом. У простих же турах вони можуть бути відсутні зовсім.
* Блок сцен - тут оформляються всі сцени віртуального туру.
На основі цієї структури доопрацюємо віртуальний тур. Додамо в нього раніше створені заставку, логотип, лінзові ефекти.
Обмеження області видимості елементів туру. Атрибут keep
Скопіюйте з матеріалів в папку images: button.png, buttoncontrol.png, logo.png.
Відкрийте код панорами створений в третій частині цієї серії уроків по krpano . З нього ми будемо брати окремі частини програми.
Скопіюємо звідти код плагіна logo попередньо помінявши шляху до зображення плагіна з
url = "logo.png"
на
url = "% SWFPATH% / images / logo.png"
Вставимо отриманий код відразу після рядка
<Krpano version = "1.0.8.14" onstart = "loadscene (panorama2);" >Отриманий код:
<Krpano version = "1.0.8.14" onstart = "loadscene (panorama2);" > <Plugin name = "logo" align = "righttop" y = "5" x = "5" url = "% SWFPATH% / images / logo.png" alpha = "0.5" onover = "tween (plugin [logo] .alpha, 1.0, 0.5) "onout =" tween (plugin [logo] .alpha, 0.5, 0.5) "onclick =" openurl ( 'http://www.1panorama.ru', _blank) "/> <scene name = "panorama1"> <view hlookat = "0" vlookat = "0" fovtype = "MFOV" fov = "90" maxpixelzoom = "1.0" fovmax = "120" limitview = "auto" /> <preview url = "% SWFPATH% / panoramas / panorama1.tiles / preview.jpg "/> <image> <cube url ="% SWFPATH% / panoramas / panorama1.tiles / pano_% s.jpg "/> </ image> <hotspot name =" spot1-2 "url ="% SWFPATH% / images / hotspot.png "ath =" - 105 "atv =" - 4 "crop =" 0 | 0 | 26 | 26 "onovercrop =" 0 | 26 | 26 | 26 "onclick =" loadscene (panorama2); " /> </ Scene> <scene name = "panorama2"> <view hlookat = "0" vlookat = "0" fovtype = "MFOV" fov = "90" maxpixelzoom = "1.0" fovmax = "120" limitview = "auto "/> <preview url ="% SWFPATH% / panoramas / panorama2.tiles / preview.jpg "/> <image> <cube url ="% SWFPATH% / panoramas / panorama2.tiles / pano_% s.jpg "/> </ image> <hotspot name = "spot2-1" url = "% SWFPATH% / images / hotspot.png" ath = "0" atv = "0" crop = "0 | 0 | 26 | 26" onovercrop = " 0 | 26 | 26 | 26 "onclick =" loadscene (panorama1); " /> </ Scene> </ krpano>Спочатку можна розраховувати, що тепер при запуску віртуального туру повинен з'явитися вже знайомий нам логотип у правому верхньому кутку, але цього не відбувається. Чому?
У krpano є обмеження області видимості елементів туру. Під видимістю тут мається на увазі видимість з точки зору krpano. Тобто бачить цю ділянку коду krpano в даному випадку чи ні. "Область видимості" - це усталений програмістський термін. Можливо було б більш зрозуміло, якщо назвати, наприклад, "область роботи" плагіна, або іншого елемента туру.
Наприклад, плагін може працювати тільки в одній сцені (тобто бути видимим для krpano), а при виході з неї віддалятися. А може мати зону видимості в усьому турі. Це зроблено для того, щоб не завантажувати пам'ять непотрібними в даний момент елементами туру.
Задати область видимості елемента туру можна за допомогою атрибута keep
keep = "true" - елемент туру працює в усьому турі.
keep = "false" (за замовчуванням) - елемент туру працює тільки в поточній сцені, а при виході з неї видаляється.
Такий атрибут мають теги plugin, event, hotspot, lensflare.
Тепер, якщо нам треба щоб логотип відображався завжди, то треба його плагіну прописати атрибут:
keep = "true"
Додавши цей рядок в плагін logo, після запуску ми побачимо логотип.
Теги плагінів (plugin), подій (event), точок переходу (hotspot) і лінзових ефектів (lensflare) можна розміщувати в блоці плагінів (як за структурою) або всередині сцен. Рішення про те де розміщувати приймається на основі того, де нам необхідна область видимості даного елемента.
Якщо необхідно на весь тур - прописуємо в загальному блоці плагінів і ставимо keep = "true";
якщо тільки в конкретній сцені - то оформляємо всередині сцени (атрибут keep в цьому випадку можна не міняти, він за замовчуванням дорівнює false);
якщо ж необхідно, щоб елемент почав працювати починаючи зі сцени N і далі зберігся у всьому турі - то прописуємо його в сцені N і ставимо keep = "true".
У разі лінзових ефектів нам якраз треба щоб вони працювали в сцені panorama1 і не працювали в panorama2.
Скопіюємо в корінь проекту файл krpano_default_flares.jpg.
В даному випадку саме в корінь, тому що шлях до зображень лінзових ефектів задається за допомогою сетів \ стилів, а це виходить за рамки даної статті. Так що будемо використовувати настройками за замовчуванням (а в них прописано, що зображення повинно лежати в корені).
А також скопіюємо з попереднього уроку рядок:
<Lensflare name = "lf0" set = "DEFAULT" visible = "true" ath = "- 138.7916" atv = "- 50.7045" size = "0.80" blind = "0.60" blindcurve = "4.00" />І помістимо її в першу сцену.
Можна задати атрибут keep = "false", але в цьому немає необхідності, тому що за замовчуванням він цього і дорівнює.
Вийде наступний код.
<Krpano version = "1.0.8.14" onstart = "loadscene (panorama2);" > <Plugin name = "logo" align = "righttop" y = "5" x = "5" url = "% SWFPATH% / images / logo.png" alpha = "0.5" keep = "true" onover = "tween (plugin [logo] .alpha, 1.0, 0.5) "onout =" tween (plugin [logo] .alpha, 0.5, 0.5) "onclick =" openurl ( 'http://www.1panorama.ru', _blank) " /> <scene name = "panorama1"> <view hlookat = "0" vlookat = "0" fovtype = "MFOV" fov = "90" maxpixelzoom = "1.0" fovmax = "120" limitview = "auto" /> < preview url = "% SWFPATH% / panoramas / panorama1.tiles / preview.jpg" /> <image> <cube url = "% SWFPATH% / panoramas / panorama1.tiles / pano_% s.jpg" /> </ image> <hotspot name = "spot1-2" url = "% SWFPATH% / images / hotspot.png" ath = "- 105" atv = "- 4" crop = "0 | 0 | 26 | 26" onovercrop = "0 | 26 | 26 | 26 "onclick =" loadscene (panorama2); " /> <Lensflare name = "lf0" set = "DEFAULT" visible = "true" ath = "- 138.7916" atv = "- 50.7045" size = "0.80" blind = "0.60" blindcurve = "4.00" /> </ scene> <scene name = "panorama2"> <view hlookat = "0" vlookat = "0" fovtype = "MFOV" fov = "90" maxpixelzoom = "1.0" fovmax = "120" limitview = "auto" /> < preview url = "% SWFPATH% / panoramas / panorama2.tiles / preview.jpg" /> <image> <cube url = "% SWFPATH% / panoramas / panorama2.tiles / pano_% s.jpg" /> </ image> <hotspot name = "spot2-1" url = "% SWFPATH% / images / hotspot.png" ath = "0" atv = "0" crop = "0 | 0 | 26 | 26" onovercrop = "0 | 26 | 26 | 26 "onclick =" loadscene (panorama1); " /> </ Scene> </ krpano>Після запуску віртуального туру видно, що в першій сцені у нас лінзові ефекти від сонця, а в другому відсутні. Тобто ми обмежили область видимості елемента туру.
Реалізації заставки до віртуального туру
При додаванні заставки до віртуального туру необхідно вирішити де прописувати її плагіни: в загальному блоці або в сценах.
Теоретично можна їх оформити в першій сцені, адже у нас вона показується тільки один раз, при старті туру. Але в цьому випадку якщо ми змінимо сцену, з якої стартує віртуальний тур (як в нашому випадку, він стартує зараз зі сцени panorama2), то доведеться перекидати плагіни в іншу сцену. Тому зробимо більш гнучко - пропишемо плагіни відповідають за заставку в загальному блоці, і додамо атрибут keep = "true". В цьому випадку вона буде показуватися при старті незалежно від того яка перша сцена була завантажена.
Скопіюйте плагіни з коду третього уроку відповідає за заставку: button і intro. Поміняйте шляху до зображень аналогічним чином в атрибуті url, і додайте атрибут keep = "true".
Крім цього скопіюйте екшен, який відповідає за закриття заставки: hideintro.
У екшенів атрибут keep не передбачений, у них обмеження області видимості не існують.
Вийде наступний код:
<Krpano version = "1.0.8.14" onstart = "loadscene (panorama2);" > <Plugin name = "logo" align = "righttop" y = "5" x = "5" url = "% SWFPATH% / images / logo.png" alpha = "0.5" keep = "true" onover = "tween (plugin [logo] .alpha, 1.0, 0.5) "onout =" tween (plugin [logo] .alpha, 0.5, 0.5) "onclick =" openurl ( 'http://www.1panorama.ru', _blank) " /> <plugin name = "intro" url = "% SWFPATH% / images / intro.png" align = "center" alpha = "0" keep = "true" onloaded = "tween (plugin [intro] .alpha, 1 , 1) "/> <plugin name =" button "url ="% SWFPATH% / images / button.png "align =" center "keep =" true "alpha =" 0 "x =" 150 "y =" - 50 "crop =" 0 | 0 | 24 | 24 "onovercrop =" 0 | 24 | 24 | 24 "ondowncrop =" 0 | 48 | 24 | 24 "onloaded =" tween (plugin [button] .alpha, 1,1 ) "onclick =" hideintro (); " /> <Action name = "hideintro"> tween (plugin [intro] .alpha, 0,1); set (plugin [intro] .enabled, false); tween (plugin [button] .alpha, 0,1); set (plugin [button] .enabled, false); </ Action> <scene name = "panorama1"> <view hlookat = "0" vlookat = "0" fovtype = "MFOV" fov = "90" maxpixelzoom = "1.0" fovmax = "120" limitview = "auto" / > <preview url = "% SWFPATH% / panoramas / panorama1.tiles / preview.jpg" /> <image> <cube url = "% SWFPATH% / panoramas / panorama1.tiles / pano_% s.jpg" /> </ image> <hotspot name = "spot1-2" url = "% SWFPATH% / images / hotspot.png" ath = "- 105" atv = "- 4" crop = "0 | 0 | 26 | 26" onovercrop = " 0 | 26 | 26 | 26 "onclick =" loadscene (panorama2); " /> <Lensflare name = "lf0" set = "DEFAULT" visible = "true" ath = "- 138.7916" atv = "- 50.7045" size = "0.80" blind = "0.60" blindcurve = "4.00" /> </ scene> <scene name = "panorama2"> <view hlookat = "0" vlookat = "0" fovtype = "MFOV" fov = "90" maxpixelzoom = "1.0" fovmax = "120" limitview = "auto" /> < preview url = "% SWFPATH% / panoramas / panorama2.tiles / preview.jpg" /> <image> <cube url = "% SWFPATH% / panoramas / panorama2.tiles / pano_% s.jpg" /> </ image> <hotspot name = "spot2-1" url = "% SWFPATH% / images / hotspot.png" ath = "0" atv = "0" crop = "0 | 0 | 26 | 26" onovercrop = "0 | 26 | 26 | 26 "onclick =" loadscene (panorama1); " /> </ Scene> </ krpano>Створення кнопок управління панорамами в віртуальному турі
Реалізуємо кнопки управління повноекранний \ віконний режим, включити \ відключити автовращеніе.
Зрозуміло, що вони нам необхідні в усьому турі, отже треба їх плагіни помістити в загальний блок. Скопіюйте плагіни з коду 3-го уроку: openfullscreen, closefullscreen, offrotate, onrotate.
Як і в попередньому параграфі - доопрацювати атрибут url, і додайте атрибут keep = "true".
Також скопіюйте рядок стартового включення автовращенія:
<Autorotate enabled = "true" />і теж додайте в загальний блок.
Крім цього поміняйте перший рядок туру так, щоб спочатку вантажилася перша панорама (на ній краще видно кнопки управління панорамами).
В результаті вийде код:
<Krpano version = "1.0.8.14" onstart = "loadscene (panorama1);" > <Plugin name = "logo" align = "righttop" y = "5" x = "5" url = "% SWFPATH% / images / logo.png" alpha = "0.5" keep = "true" onover = "tween (plugin [logo] .alpha, 1.0, 0.5) "onout =" tween (plugin [logo] .alpha, 0.5, 0.5) "onclick =" openurl ( 'http://www.1panorama.ru', _blank) " /> <plugin name = "intro" url = "% SWFPATH% / images / intro.png" align = "center" alpha = "0" keep = "true" onloaded = "tween (plugin [intro] .alpha, 1 , 1) "/> <plugin name =" button "url ="% SWFPATH% / images / button.png "align =" center "keep =" true "alpha =" 0 "x =" 150 "y =" - 50 "crop =" 0 | 0 | 24 | 24 "onovercrop =" 0 | 24 | 24 | 24 "ondowncrop =" 0 | 48 | 24 | 24 "onloaded =" tween (plugin [button] .alpha, 1,1 ) "onclick =" hideintro (); " /> <Plugin name = "openfullscreen" url = "% SWFPATH% / images / buttoncontrol.png" align = "bottomright" keep = "true" y = "10" x = "10" visible = "true" crop = " 0 | 0 | 30 | 30 "onovercrop =" 0 | 30 | 30 | 30 "onclick =" set (fullscreen, true); set (plugin [openfullscreen] .visible, false); set (plugin [closefullscreen] .visible, true); " /> <Plugin name = "closefullscreen" url = "% SWFPATH% / images / buttoncontrol.png" align = "bottomright" keep = "true" y = "10" x = "10" visible = "false" crop = " 30 | 0 | 30 | 30 "onovercrop =" 30 | 30 | 30 | 30 "onclick =" set (fullscreen, false); set (plugin [openfullscreen] .visible, true); set (plugin [closefullscreen] .visible, false); " /> <Plugin name = "offrotate" url = "% SWFPATH% / images / buttoncontrol.png" align = "bottomright" keep = "true" y = "10" x = "50" visible = "true" crop = " 90 | 0 | 30 | 30 "onovercrop =" 90 | 30 | 30 | 30 "onclick =" set (autorotate.enabled, false); set (plugin [onrotate] .visible, true); set (plugin [offrotate]. visible, false); " /> <Plugin name = "onrotate" url = "% SWFPATH% / images / buttoncontrol.png" align = "bottomright" keep = "true" y = "10" x = "50" visible = "false" crop = " 60 | 0 | 30 | 30 "onovercrop =" 60 | 30 | 30 | 30 "onclick =" set (autorotate.enabled, true); set (plugin [onrotate] .visible, false); set (plugin [offrotate]. visible, true); " /> <Autorotate enabled = "true" /> <action name = "hideintro"> tween (plugin [intro] .alpha, 0,1); set (plugin [intro] .enabled, false); tween (plugin [button] .alpha, 0,1); set (plugin [button] .enabled, false); </ Action> <scene name = "panorama1" onstart = "startscene ();" > <View hlookat = "0" vlookat = "0" fovtype = "MFOV" fov = "90" maxpixelzoom = "1.0" fovmax = "120" limitview = "auto" /> <preview url = "% SWFPATH% / panoramas /panorama1.tiles/preview.jpg "/> <image> <cube url ="% SWFPATH% / panoramas / panorama1.tiles / pano_% s.jpg "/> </ image> <hotspot name =" spot1-2 " url = "% SWFPATH% / images / hotspot.png" ath = "- 105" atv = "- 4" crop = "0 | 0 | 26 | 26" onovercrop = "0 | 26 | 26 | 26" onclick = " loadscene (panorama2); " /> <Lensflare name = "lf0" set = "DEFAULT" visible = "true" ath = "- 138.7916" atv = "- 50.7045" size = "0.80" blind = "0.60" blindcurve = "4.00" /> </ scene> <scene name = "panorama2"> <view hlookat = "0" vlookat = "0" fovtype = "MFOV" fov = "90" maxpixelzoom = "1.0" fovmax = "120" limitview = "auto" /> < preview url = "% SWFPATH% / panoramas / panorama2.tiles / preview.jpg" /> <image> <cube url = "% SWFPATH% / panoramas / panorama2.tiles / pano_% s.jpg" /> </ image> <hotspot name = "spot2-1" url = "% SWFPATH% / images / hotspot.png" ath = "0" atv = "0" crop = "0 | 0 | 26 | 26" onovercrop = "0 | 26 | 26 | 26 "onclick =" loadscene (panorama1); " /> </ Scene> </ krpano>В результаті у нас вийшло реалізувати весь функціонал панорами з уроку Екшени, кнопки. Створення заставки панорами , Але вже в рамках віртуального туру.
У наступних уроках продовжиться робота над поточним туром. Будуть реалізовані більш складні елементи віртуального туру, а також крім цього спробуємо оптимізувати окремі роботи над турами.
Всі статті по роботі з krpano
Залишилися питання?
Задайте їх на форумі
Про що тут?
Що потрібно?
Про що тут?
Що потрібно?
Чому?