Actionscript 3 地图的removeChild(mapQuest)
当用户单击后退按钮时,我正试图关闭地图 我正在使用AS3 for Adobe AIR应用程序 我尝试使用removeChildMyMap调用函数以关闭它,但它不起作用。错误2025:提供的displayobject必须是调用者的子对象 你知道我怎么做吗 这是我的密码:Actionscript 3 地图的removeChild(mapQuest),actionscript-3,Actionscript 3,当用户单击后退按钮时,我正试图关闭地图 我正在使用AS3 for Adobe AIR应用程序 我尝试使用removeChildMyMap调用函数以关闭它,但它不起作用。错误2025:提供的displayobject必须是调用者的子对象 你知道我怎么做吗 这是我的密码: var MyMap:TileMap = new TileMap("KEY_OF_MAP"); addChild(MyMap); VisibleButton(); } function VisibleButto
var MyMap:TileMap = new TileMap("KEY_OF_MAP");
addChild(MyMap);
VisibleButton();
}
function VisibleButton():void
{
var skip:MovieClip;
skip = new skype
addChild(skip);
skip.addEventListener(MouseEvent.CLICK, closeMap, false, 0, true);
}
function closeMap(e:MouseEvent):void
{
trace("ferme carte");
var MyMap:TileMap = new TileMap("KEY_OF_MAP");
removeChild(MyMap);
}
编辑:
所以,我会尽可能详细地告诉你
我直接将代码放入场景中,如下所示:
在第11张图片中,我对一个名为goMapButton的按钮进行了编码。
行动代码为:
goMapButton.addEventListener(MouseEvent.CLICK, callDisplayMap, false, 0, true);
function callDisplayMap(event:MouseEvent):void{
displayMap();
}
在我的第12张图片中,我有以下动作代码:
stop();
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import com.mapquest.tilemap.*;
import com.mapquest.LatLng;
import com.mapquest.tilemap.pois.*;
import com.mapquest.services.directions.Directions;
import com.mapquest.services.directions.DirectionsConstants;
import com.mapquest.services.directions.DirectionsEvent;
import com.mapquest.services.geocode.Geocoder;
import com.mapquest.services.geocode.*;
import com.mapquest.services.geocode.GeocoderEvent;
import com.mapquest.services.geocode.GeocoderLocation;
import com.mapquest.tilemap.Size;
import flash.display.Bitmap;
import com.mapquest.tilemap.TileMap;
import com.mapquest.tilemap.controls.inputdevice.MouseWheelZoomControl;
import com.mapquest.tilemap.controls.shadymeadow.SMLargeZoomControl;
import com.mapquest.tilemap.controls.shadymeadow.SMViewControl;
function displayMap():void{
trace("displaying Map");
//turn scaling off
this.stage.scaleMode = StageScaleMode.NO_SCALE;
// create a new TileMap object, passing your platform key
var myMap:TileMap = new TileMap("Fmjtd%7Cluur2g0an0%2C2s%3Do5-9azwdr");
myMap.size = new Size(800, 533);
myMap.addControl(new SMLargeZoomControl());
myMap.addControl(new MouseWheelZoomControl());
myMap.setCenter(new LatLng(-21.060478, 164.861113),12);
//add the map to the sprite.
addChild(myMap);
var myPoi:Poi;
//ICONES BATTERIES
[Embed (source="huiles.png")]
var HuilesImg:Class;
var embeddedIconPoi:Poi;
var myIcon:MapIcon = new MapIcon();
myIcon.setImage(new HuilesImg(),22,32);
embeddedIconPoi = new Poi(new LatLng(-11.71199, 12.647725));
embeddedIconPoi.rolloverAndInfoTitleText = "Info about that place";
embeddedIconPoi.icon = myIcon;
myMap.addShape(embeddedIconPoi);
VisibleButton();
}
//This function makes a button visible at the left corner of the screen
function VisibleButton():void{
var skip:MovieClip;
skip = new skype
addChild(skip);
skip.addEventListener(MouseEvent.CLICK, closeMap, false, 0, true);
}
//I'd like to close the map when the user click on the skip button
function closeMap(e:MouseEvent):void{
var myMap:TileMap = new TileMap("Fmjtd%7Cluur2g0an0%2C2s%3Do5-9azwdr");
trace("ferme carte");
trace(myMap.parent == null);
}
首先,删除:
var MyMap:TileMap = new TileMap("KEY_OF_MAP");
因为您已经准备好在代码的第一行中启动map的实例
我不认为在第一次修复后您会需要它,但如果您仍然得到错误,您可以使用这个代替
MyMap.parent.removeChild(MyMap);
像这样:
stop();
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import com.mapquest.tilemap.*;
import com.mapquest.LatLng;
import com.mapquest.tilemap.pois.*;
import com.mapquest.services.directions.Directions;
import com.mapquest.services.directions.DirectionsConstants;
import com.mapquest.services.directions.DirectionsEvent;
import com.mapquest.services.geocode.Geocoder;
import com.mapquest.services.geocode.*;
import com.mapquest.services.geocode.GeocoderEvent;
import com.mapquest.services.geocode.GeocoderLocation;
import com.mapquest.tilemap.Size;
import flash.display.Bitmap;
import com.mapquest.tilemap.TileMap;
import com.mapquest.tilemap.controls.inputdevice.MouseWheelZoomControl;
import com.mapquest.tilemap.controls.shadymeadow.SMLargeZoomControl;
import com.mapquest.tilemap.controls.shadymeadow.SMViewControl;
// create a new TileMap object, passing your platform key
var myMap:TileMap = new TileMap("Fmjtd%7Cluur2g0an0%2C2s%3Do5-9azwdr");
function displayMap():void{
trace("displaying Map");
//turn scaling off
this.stage.scaleMode = StageScaleMode.NO_SCALE;
myMap.size = new Size(800, 533);
myMap.addControl(new SMLargeZoomControl());
myMap.addControl(new MouseWheelZoomControl());
myMap.setCenter(new LatLng(-21.060478, 164.861113),12);
//add the map to the sprite.
addChild(myMap);
var myPoi:Poi;
//ICONES BATTERIES
[Embed (source="huiles.png")]
var HuilesImg:Class;
var embeddedIconPoi:Poi;
var myIcon:MapIcon = new MapIcon();
myIcon.setImage(new HuilesImg(),22,32);
embeddedIconPoi = new Poi(new LatLng(-11.71199, 12.647725));
embeddedIconPoi.rolloverAndInfoTitleText = "Info about that place";
embeddedIconPoi.icon = myIcon;
myMap.addShape(embeddedIconPoi);
VisibleButton();
}
//This function makes a button visible at the left corner of the screen
function VisibleButton():void{
var skip:MovieClip;
skip = new skype
addChild(skip);
skip.addEventListener(MouseEvent.CLICK, closeMap, false, 0, true);
}
//I'd like to close the map when the user click on the skip button
function closeMap(e:MouseEvent):void{
trace("ferme carte");
trace(myMap.parent == null);
if (myMap.parent == this)
{
removeChild(myMap);
}
}
尝试使用MyMap.parent.removeChildMyMap删除MyMap;如果工作正常-在非工作代码中,您尝试从添加MyMap的位置的其他位置删除MyMap。我遇到错误1009:无法访问null对象引用的属性或方法。“traceMyMap.parent==null;如果它返回true,则它没有父对象,因此您需要查看其他位置。如果它打印为false,那么您的代码中有一些奇怪的东西,并且在您发布的程序部分中不可见。它返回的确实是true。。。那我该怎么办呢?我想我应该创建一个容器,但我对这个不太熟悉。。。您对此有何看法:var myMap:TileMap=new TileMapMY_KEY;myMap.size=新尺寸800533;myMap.addControlnew SMLargeZoomControl;myMap.addControlnew MouseweelZoomControl;myMap.setCenternew LatLng48.8566140,2.3522219,12;var mapContainer:Sprite=新Sprite;mapContainer.addChildmyMap;是的,但如果删除var MyMap,则会出现错误:错误1009:无法访问空对象引用的属性或方法问题是您试图删除的对象不是父对象。所以你失去了对对象的引用。尝试取出:var myMap:TileMap=new TileMapFmjtd%7Cluur2g0an0%2C2s%3Do5-9azwdr;从displayMap函数中选择myMap对象,并将其置于函数之前,这样displayMap和closeMap函数就可以看到myMap对象,并且您可以确保该对象是同一个对象。@user2421975如果解决了您的问题,请确保将答案标记为正确