ActionScript 3.0 ошибка приведения типа - PullRequest
1 голос
/ 25 ноября 2011

Я пытаюсь перейти к другому кадру, щелкнув видеоролик.Я проверил имя фрейма и т. Д., Но каждый раз, когда я пытаюсь щелкнуть свой мувиклип, всегда появляется такая ошибка.Приложение, которое я сделал, сочетает в себе карту Google с Flash.Поэтому, когда я нажимаю мувиклип, он должен перейти к другому фрейму, содержащему карту Google.

TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::Stage@2675cf99 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 передза любую предоставленную помощь ....

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

startMap напрямую присоединяется к сцене, и класс сцены не наследуется от MovieClip.

Вам нужно изменить MovieClip(this.parent).gotoAndStop("mymap"); на gotoAndStop("mymap");, или если вы добавляете startMap к сцене,вместо добавления startMap с stage.addChild(startMapObj);, вы должны сделать this.addChild(startMapObj);.

0 голосов
/ 25 ноября 2011

Область действия вашего метода moveToMap - это сам класс startMap (который, как я предполагаю, представляет собой мувиклип, добавленный к объекту корневой стадии).Поэтому this.parent будет преобразован в объект сцены, и при попытке привести его к другому типу (MovieClip) вы получите ошибку приведения типа.

Является ли метка кадра mymap на самом деле в корнеграфик?Если вы хотите манипулировать корневой шкалой времени, вы должны использовать свойство root Stage (и привести его к MovieClip).Так что в вашей функции moveToMap это будет выглядеть примерно так:

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

(Обратите внимание, что у вас будет доступ только к свойству stage, если ваш DisplayObjectдобавлен в список отображения).

...