|
|
|||||
Облако тегов в Flex-проекте
Есть исходник облака тегов http://evocms-plugins.svn.sourceforg...ud_plugin/src/
1. Пытаюсь вставит tagcloud.swf как SWFLoader, вылезает ошибка, хотя все файлы и классы на месте Основной поток (Приостановлено: TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".) com.roytanck.wpcumulus::TagCloud [отсутствует исходный код] Если есть у кого 5 минут гляньте, плиз, как лучше интегрировать это облако тегов в флекс. |
|
|||||
Цитата:
Вот другой пример - пошел иным путём: http://wonderfl.net/c/n2ly Там ещё проще. 1. На основе кода по ссылке выше создаю файл N2y.as package spr { import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.filters.BitmapFilterQuality; import flash.filters.BlurFilter; import flash.filters.GlowFilter; import flash.text.TextField; import org.papervision3d.core.geom.Particles; import org.papervision3d.core.geom.renderables.Particle; import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.materials.special.BitmapParticleMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.view.BasicView; public class N2y extends Sprite { private var scale:Number = 5; private var radius:Number = 350; private var smoothing:Boolean = true; private var minAlpha:Number = 0.3; private var glow:GlowFilter; private var tags:Array; private var tag_num:uint; private var bv:BasicView; private var tagArray:Array; private var tagContainer:DisplayObject3D; private var cSprite:Sprite= new Sprite; public function N2y() { init (); } private function init ():void { glow = new GlowFilter (0x003366, 1, 8, 8, 2, BitmapFilterQuality.LOW, true, false); tags = ["free","news","Cookie","practice","JavaScript","toy","life","something","LocalConnection","memo","MSN","funny", "ActionScript 3", "Food", "Book", "Photo", "favorite"]; tag_num = tags.length; tagArray = []; tagContainer = new DisplayObject3D ("tag_container"); tagContainer.x = -radius * 0.25; tagContainer.y = radius * 0.25; bv = new BasicView (300, 300, true, true); bv.viewport.interactive = true; bv.scene.addChild (tagContainer); bv.camera.z = -2 * radius; bv.camera.zoom = 20; bv.startRendering (); addChild (bv); buildTags (); addEventListener (Event.ENTER_FRAME, enterFrameHandler); } private function buildTags ():void { var i:uint; for (i = 0; i < tag_num; i++) { // 2D var txt:TextField = new TextField (); txt.text = tags[i]; txt.filters = [new BlurFilter(1.1, 1.1)]; var txtW:Number = txt.textWidth + 4; var txtH:Number = txt.textHeight + 4; var bitmap:BitmapData = new BitmapData (txtW, txtH, true, 0x01FFFFFF); bitmap.draw (txt); var phi:Number = Math.acos((2 * (i + 1) - 1) / tag_num - 1); var theta:Number = Math.sqrt(tag_num * Math.PI) * phi; // 3D var material:BitmapParticleMaterial = new BitmapParticleMaterial (bitmap); material.interactive = true; material.smooth = smoothing; var tag:Particle = new Particle (material, scale, 0, 0, 0); var tagHolder:Particles = new Particles ("tag_"); tagHolder.addParticle (tag); tagHolder.x = radius * Math.cos (theta) * Math.sin (phi); tagHolder.y = radius * Math.sin (theta) * Math.sin (phi); tagHolder.z = radius * Math.cos (phi); tagHolder.useOwnContainer = true; tagHolder.autoCalcScreenCoords = true; tagHolder.addEventListener (InteractiveScene3DEvent.OBJECT_OVER, objectOverHandler); tagHolder.addEventListener (InteractiveScene3DEvent.OBJECT_OUT, objectOutHandler); //tagHolder.addEventListener (InteractiveScene3DEvent.OBJECT_PRESS, objectPressHandler); tagContainer.addChild (tagHolder); tagArray.push (tagHolder); } } private function objectOverHandler (e:InteractiveScene3DEvent):void { bv.viewport.buttonMode = true; e.target.filters = [glow]; } private function objectOutHandler (e:InteractiveScene3DEvent):void { bv.viewport.buttonMode = false; for (var j:uint = 0; j < tag_num; j++) { tagArray [j].filters = []; } } private function enterFrameHandler (e:Event):void { tagContainer.rotationX += (mouseY - 300 * 0.5) * 0.01; tagContainer.rotationY += (mouseX - 300 * 0.5) * 0.01; for (var j:uint = 0; j < tag_num; j++) { tagArray[j].alpha = minAlpha + (1 - minAlpha) * (1 - (tagArray[j].screen.z - radius) / (2 * radius)); } } } } 3. Импортирую библиотеку papervision3d. 4. Добавляю в проекте определение имен для нового компонента ns1: <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:ns1="spr.*" 6. В главном MXML получаю ошибку на новом компоненте "В инициализаторе для "mxmlContentFactory" невозможно присвоить тип spr.N2y целевому типу Array или целевому типу элемента mx.core.IVisualElement." Всё |
|
|||||
Все отображаемые элементы, во флекс контейнерах, должны наследоваться от UIComponent (если не вдаваться в подробности с интерфейсами), дабы обеспечить live cycle, measured в частности.
На практике это означает, что если мы хотим вставить некий визуальный объект из чистого флеша, то его необходимо обернуть в UIComponent. Ну или в коде делаем наследника UIComponent и добавляем в него (addChild) спрайт или мувиклип. |
|
|||||
Спасибо alatar.
Только пока безрезультатно. По первому варианту с тегами <UIComponent> пишет Не удалось использовать <UIComponent> для реализации компонента. По второму разместил <ns1:N2y id="tir"/> в fxeclarations. Создал контейнер и определение addChild - ошибок нет, но и не показывает ничего. |
|
|||||
На это - "Объявления компонента здесь не разрешены."
Цитата:
Добавлено через 19 часов 23 минуты Заработало когда добавил rawChildren: |
Часовой пояс GMT +4, время: 00:26. |
|
« Предыдущая тема | Следующая тема » |
|
|