actionscript 3.0型強制変換エラー

ムービークリップをクリックして別のフレームに移動しようとしています。フレーム名などを確認しましたが、MovieClipをクリックしようとするたびに常にこのようなエラーが発生します。私が作ったアプリケーションは、フラッシュとGoogleマップを組み合わせています。したがって、ムービークリップをクリックすると、googleマップを含む別のフレームに移動する必要があります。

TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::[email protected] to flash.display.MovieClip.
at startMap/movetoMap()

これは私のコードです:

package  {

import flash.display.MovieClip;
import flash.events.MouseEvent;
import com.google.maps.*;
import flash.geom.Point;
import flash.events.Event;
import com.google.maps.overlays.Marker;
import com.google.maps.services.ClientGeocoder;
import com.google.maps.services.GeocodingEvent;

public class startMap extends MovieClip {

    var gMap : Map = new Map();

    public function startMap() {

        this.x = 700;
        this.y = 150;
        this.scaleX = 0.5;
        this.scaleY = 0.5;
        this.addEventListener(MouseEvent.CLICK, movetoMap);
    }

    function movetoMap (e : MouseEvent)
    {
//I think this is where the error took place...
        MovieClip(this.parent).gotoAndStop("mymap");//move to another frame

                    //the code below is for the next frame
        //trace ("initiating map");
        /*
        gMap.key = "ABQIAAAAkvJLDXCdl31EuFDEitKQ6hTDVs7mYo4hdRoqkWYrrPdtz_Eb9RRJP9mw3bPiboGSX4c0stQsYo4aPQ";
        gMap.sensor = "true";
        gMap.x = 100;
        gMap.y = 50;
        gMap.setSize(new Point(stage.width - 200, stage.height - 100));
        gMap.addEventListener(MapEvent.MAP_READY, prepareMap);
        gMap.addEventListener(MapMouseEvent.CLICK, showPoint);
        stage.addChild (gMap);
        */
    }
    /*
    function prepareMap (e : Event)
    {
        doGeoCode ("Jakarta, Indonesia");
    }

    function showPoint (e : MapMouseEvent)
    {
        var revGeoCode : ClientGeocoder = new ClientGeocoder();
        revGeoCode.addEventListener(GeocodingEvent.GEOCODING_SUCCESS,
                function markPlace (e : GeocodingEvent) {
                    var place : Array = e.response.placemarks;
                    var marker : Marker = new Marker (place[0].point);
                    gMap.addOverlay(marker);
                    gMap.setZoom(8, true);
                    gMap.setCenter (marker.getLatLng());
                    marker.addEventListener(MapMouseEvent.CLICK,
                            function showInfo(e : MapMouseEvent){
                                gMap.openInfoWindow(marker.getLatLng(),
                                    new InfoWindowOptions ({title:"Welcome to", content:place[0].address}));
                            });
                });
        revGeoCode.addEventListener(GeocodingEvent.GEOCODING_FAILURE, 
                function addFailure(e : GeocodingEvent){
                    trace ('fail to geocode');
                });
        revGeoCode.reverseGeocode(e.latLng);
    }

    function doGeoCode (placeName : String)
    {
        var placeInfo : ClientGeocoder = new ClientGeocoder();
        placeInfo.addEventListener(GeocodingEvent.GEOCODING_SUCCESS, 
                function addInfo(e : GeocodingEvent){
                    var place : Array = e.response.placemarks;
                    var mark : Marker = new Marker (place[0].point);
                    gMap.setCenter(mark.getLatLng());
                    gMap.setZoom(8, true);
                    gMap.addOverlay(mark);
                    mark.addEventListener(MapMouseEvent.CLICK,
                            function setPlaceInfo (e : MapMouseEvent){
                                gMap.openInfoWindow(place[0].point,
                                    new InfoWindowOptions ({title:"Welcome to", content:place[0].address}));
                            });
                });
        placeInfo.addEventListener(GeocodingEvent.GEOCODING_FAILURE, 
                function addFailure(e : GeocodingEvent){
                    trace ('fail to geocode');
                });
        placeInfo.geocode(placeName);
    }
    */
}

}

THXの助けを借りる前に....

1

2 答え

startMapはステージに直接アタッチされ、stageクラスはMovieClipから継承しません。

gotoAndStop( "mymap"); MovieClip(this.parent).gotoAndStop( "mymap"); を変更する必要があります。 stage.addChild(startMapObj); を使用してstartMapを追加するのではなく、 this.addChild(startMapObj); を実行する必要があります。

1
追加された
私はthis.addChild(myMapObj)を試しましたが、ボタンがステージ上に表示されませんでした....もし私がstage.addChild(myMapObj)を使用すると、ボタンはまだ私が言及したエラーで表示されます
追加された 著者 Jason,
それをステージに追加すると、myMapObjの親がステージになり、フレームに送信することはできません(フレームもありません)。実際にアニメーションが実際にどのように機能するかを説明できれば、 this myMapObj をカバーしています。
追加された 著者 felipemaia,

moveToMap メソッドのスコープは、 startMap クラスそのものです(これは、私が推測するように、ルートステージオブジェクトに追加されたMovieClipです)。したがって、 this.parent はステージオブジェクトに解決され、別のタイプ(MovieClip)にキャストしようとすると型強制エラーが発生します。

mymap フレームラベルは実際にルートタイムライン上にありますか?ルートタイムラインを操作する場合は、Stageの root プロパティを使用して MovieClip にキャストします。したがって、あなたの moveToMap 関数では、これはちょっと見えるでしょう:

MovieClip(stage.root).gotoAndStop( "mymap");

DisplayObject が表示リストに追加されている場合にのみ、 stage プロパティにアクセスできます。

0
追加された