Flash Builder 4 で Google Maps API for Flashで作ったGoogle Mapが表示されない、表示されるまでにとても時間がかかるトラブルに遭遇。
AIR アプリケーションを作ろうとしています。
【制作環境】
Flex SDK 4.5.0.17689
Google Maps API for Flash 1.20 (map_flex_1_20.swc)
表示される
UIComponentに直接addChildすると表示されます。
private function initApplecation():void { var uic:UIComponent; = new UIComponent(); addElement(_uic); var map:Map = makeMap(); uic.addChild(map); } private function makeMap():Map { var map:Map = _map = new Map(); map.language = 'ja'; map.key = "YOUR MAP KEY"; map.url = "YOUR DOMAIN"; map.sensor = 'false'; map.setSize(new Point(600, 300)); map.addEventListener(MapEvent.MAP_READY, onReady); map.addEventListener(MapEvent.MAP_INITIALIZE_FAILED, onFaile); return map; } private function onFaile(event:MapEvent):void { trace(event); } private function onReady(event:MapEvent):void { trace(event); } |
UIComponentにDisplayObjectContainer(MovieClipやSprite)をaddChildしてそれにMapをaddChildすると表示できません。
表示できない
MovieClipへaddChild
private function initApplecation():void { var uic:UIComponent; = new UIComponent(); addElement(_uic); var map:Map = makeMap(); var mc:MovieClip = new MovieClip(); uic.addChild(mc); mc.addChild(map) } |
表示できない
SpriteへaddChild
private function initApplecation():void { var uic:UIComponent; = new UIComponent(); addElement(_uic); var map:Map = makeMap(); var sp:Sprite = new Sprite(); uic.addChild(sp); sp.addChild(map); } |
Google のサンプルコード例です。
<maps:Map xmlns:maps="com.google.maps.*" id="map" mapevent_mapready="onMapReady(event)" width="100%" height="100%" url="http://code.google.com/apis/maps/" key="your_api_key"/> |
以下のように解説されています。
簡単な例ですが、次の点に注意してください:
- 最初に <mx:Application> を宣言し、Flex アプリケーションに必要なコードのすべてを収容します。この <mx:Application> オブジェクト内で、xm 名前空間を宣言し、標準の Flex コンポーネントを参照します。
- Map オブジェクトを <mx:Application> の子として宣言し、maps 名前空間を定義して com.google.maps.* からコードを参照します。id、mapevent_mapready ハンドラ、API の key などのパラメータも定義します。これらのパラメータについては後で説明します
- 子の <mx:Script> オブジェクト内で ActionScript コードを定義します。
- その ActionScript コードで、mapevent_mapready イベントの受け取り時に地図を中心に配置します。
なにかこちらのやり方が間違っているのかもしれません。
MXMLには馴染めないせいもあって、宣言だけしたあとは全てActionScript(Class)へ記述する制作手法をとっているのですが、それがまずいのかもしれません。
ちなみにサブウインドウにも表示できませんでした。
private function initApplecation():void { var map:Map = makeMap(); var window:NativeWindow = new makeWindow(); window.stage.addChild(map); } private function makeWindow():NativeWindow { var option:NativeWindowInitOptions = new NativeWindowInitOptions(); option.resizable = false; option.systemChrome = NativeWindowSystemChrome.NONE; option.transparent = false; option.type = NativeWindowType.LIGHTWEIGHT; var window:NativeWindow = new NativeWindow(option); window.width = 600; window.height = 300; window.x = 0; window.y = 0; window.alwaysInFront = true; window.activate(); return window; } |
*表示されない場合も MapEvent.MAP_READY
は発生します。
コンソールには Google Maps API for Flash のログが表示されています。