определить размер SWF. сгибать / as3 - PullRequest
1 голос
/ 17 декабря 2009

Я создаю карту с интересными точками. (POI) Когда пользователь наводит курсор на POI, на экран выскакивает информационный пузырь, и он загружает SWF. У меня сейчас 3 проблемы. Моя четвертая проблема в том, что это должно произойти в понедельник 21-го! поэтому любая помощь будет принята с благодарностью!

  1. Я не могу определить размер swf, так что моя инфопузырь изменит размер до размера swf.

  2. При наведении указателя мыши на мой SWF-файл он исчезает.

  3. Я бы хотел, чтобы мой файл swf всплывал в отдельном слое, а не на сцене моего основного гибкого файла ... но я понятия не имею, как это сделать.

</p> <pre><code>package com.modestmaps { import flash.display.Graphics; import flash.display.Loader; import flash.display.Shape; import flash.display.Sprite; import flash.filters.BlurFilter; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.net.URLRequest; import flash.text.TextField; public class InfoBubble extends Sprite { public var textField:TextField; public var background:Shape; public var shadow:Shape; public function InfoBubble(text:String) { //I name the instance of my POI marker on my map to the url link of my swf file. So whatever marker i click on the correct url will this.name = urlLink; this.mouseEnabled = true; this.mouseChildren = false; //this creates a shadow behind my infobubble shadow = new Shape(); shadow.filters = [ new BlurFilter(16, 16) ]; shadow.transform.matrix = new Matrix(1, 0, -0.5, 0.5, 0, 0); addChild(shadow); background = new Shape(); addChild(background); textField = new TextField(); textField.selectable = true; textField.multiline = true; textField.wordWrap = true; //textField.text = urlLink; textField.width = textField.textWidth+300; textField.height = textField.textHeight+288; //addChild(textField); var request:URLRequest = new URLRequest(urlLink); var loader:Loader = new Loader(); loader.load(request); addChild(loader); //marker clips are positioned with (0,0) at the given location //current measurements of swf file w432 h288 //if i could dynamically determine the size of the loaded swf file its position would be automatically calculated loader.y = -288 - 37; loader.x = -8; //marker clips are positioned with (0,0) at the given location textField.y = -textField.height - 35; textField.x = -10; //currently my rectangle's size is determined by the textField size. I don't even use the textfield. I want the rectangle to be drawn using the dimensions of the swf file instead. var rect:Rectangle = textField.getRect(this); // get your graph paper ready, here's a "speech bubble" background.graphics.beginFill(0x12345); shadow.graphics.beginFill(0x000000); for each (var g:Graphics in [ background.graphics, shadow.graphics ] ) { g.moveTo(rect.left, rect.top); g.lineTo(rect.right, rect.top); g.lineTo(rect.right, rect.bottom); g.lineTo(rect.left+15, rect.bottom); g.lineTo(rect.left+10, rect.bottom+15); g.lineTo(rect.left+5, rect.bottom); g.lineTo(rect.left, rect.bottom); g.lineTo(rect.left, rect.top); g.endFill(); } } } }

Надеюсь, вы, более опытные программисты, сможете мне помочь. Я новичок, чтобы сгибать и as3

Редактировать: в этом файле нет javascript. Все это AS3. Edit2: это временный сайт, на котором я тестирую http://cjbutchershop.com/temp/adtypes/mapTest.swf

Ответы [ 3 ]

1 голос
/ 17 декабря 2009

Размер вашего приложения можно узнать, выполнив:

var width:int = Application.application.width;
var height:int = Application.application.height;

Что касается текста, исчезающего при наведении курсора на информационный пузырь; Вы можете пересмотреть свой подход. Вместо того, чтобы загружать внешний SWF-файл, я реализовал информационные пузыри для скромных карт, добавив / удалив дочерние объекты (например, TextField) в мой маркерный объект (который расширяет Sprite) в ответ на соответствующие события мыши.

0 голосов
/ 18 декабря 2009

"Итак, вы пытаетесь получить размер приложения из информационного пузыря SWF? Почему информационный пузырь находится в отдельном SWF? объект информационного пузыря. - высота 2 часа назад "

У меня есть три различных типа инфо-пузырьков (показан только статический пузырь). Некоторые из моих информационных пузырей имеют движущийся контент. Я не ищу размер приложения внешнего SWF в пузыре, я ищу физический размер. Высота и ширина внешнего swf, заполняющего пузырь. Если бы я знал высоту и ширину, я мог бы сделать, чтобы инфопузырь соответствовал высоте и ширине. Прямо сейчас у меня есть информационный пузырь, закодированный в размере текущего информационного пузыря; однако у меня будут файлы SWF-файлов с разной информацией.

0 голосов
/ 17 декабря 2009

Я новичок в Flex, но сделал что-то подобное, попробовав пример во время обучения. По сути, я предлагаю открыть пузырь в новом всплывающем окне, используя класс PopUpManager для события MouseOver в родительском окне (на вашей карте). И покажите всплывающее окно в компоненте TitleWindow, а также коснитесь события закрытия в компоненте окна заголовка. Таким образом, вы вернетесь на ту же страницу. Надеюсь, это поможет.

Код для размещения здесь

<? xml version = "1.0" encoding = "utf-8"? >

<mx:Script>
    <![CDATA[
        import mx.events.ListEvent;
        import mx.controls.Alert;
        import mx.managers.PopUpManager;
        import mx.rpc.events.ResultEvent;
        import mx.collections.ArrayCollection;

       [Bindable]
       public var photoFeed:ArrayCollection;

        public function searchFlickr():void {
            photoService.cancel();
            var params:Object = new Object();
                params.format = 'rss_200_enc';
                params.tags = srchTxtId.text;               
            photoService.send(params);
        }

        public function resultHandler(event:ResultEvent):void {
            photoFeed = event.result.rss.channel.item as ArrayCollection;
        }

        public function openPanel(levent:ListEvent):void {
            var panelCmpObj:panelcomp = new panelcomp();    
               panelCmpObj.source = levent.itemRenderer.data.content.url;           
            PopUpManager.addPopUp(panelCmpObj,this,true);
        }
        public function test():void {
            Alert.show('testtest');
            }           

    ]]>
</mx:Script>

<mx:HTTPService id="photoService" url="http://api.flickr.com/services/feeds/photos_public.gne" result="resultHandler(event)"/>

<mx:HBox width="362" height="24">
    <mx:TextInput id="srchTxtId"/>
    <mx:Button label="Search for pics" id="srchBtnId" click="searchFlickr()"/>
</mx:HBox>
<mx:TileList id="imgTileList" dataProvider="{photoFeed}" width="100%" height="100%" itemClick="openPanel(event)">   
<mx:itemRenderer>
    <mx:Component>
      <mx:VBox width="125" height="125"
            paddingBottom="5"
            paddingLeft="5"
            paddingTop="5"
            paddingRight="5">
            <mx:Image width="75" height="75" source="{data.thumbnail.url}"/>
      </mx:VBox>
    </mx:Component>
</mx:itemRenderer>
</mx:TileList>

КОД ДЛЯ КОМПОНЕНТА, показанный в PopUP
<? xml version = "1.0" encoding = "utf-8"? >
close = "titleWindow_close (event);" >
<! [CDATA [ import mx.managers.IFocusManagerComponent; import mx.controls.Alert; import mx.core.IFlexDisplayObject; import mx.events.CloseEvent; import mx.managers.PopUpManager; </p>

        [Bindable]
        public var source:String;

        private function init():void {
            PopUpManager.centerPopUp(this);
        }

        private function titleWindow_close(evt:CloseEvent):void {
            PopUpManager.removePopUp(evt.target as IFlexDisplayObject);
        }
    ]] >
< /mx:Script>

< mx:Image width="379" height="261" id="imgId" source="{source}"/>
   <mx:ControlBar horizontalAlign="right" width="100%">
</ mx:ControlBar>

</ mx: TitleWindow>

...