[]TiledMap销毁的问题,TiledMap销毁后屏幕变灰,不能显示

问题的表现是,当我销毁地图后,再次创建一个ui节点到场景上,这个时候屏幕是灰色的,什么都不能显示,但是ui的按钮可以点击。
我的代码:
var _map:TiledMap = new TiledMap();
var viewRect:Rectangle = new Rectangle(0,0,8600,1800);
_map.createMap("res/race.json",viewRect);
我的游戏销毁的代码
_map.destroy();
_map = null;
Laya.stage.addChild(new Plazz());//ui

经过排查后发现问题出现在TiledMap相关的代码里面
在TiledMap的destroy方法内
/**
* 销毁地图
*/
public function destroy():void {
.......

//这里是销毁地图层的代码
var tLayer:MapLayer;
for (i = 0; i < _layerArray.length; i++) {
tLayer = _layerArray[i];
tLayer.clearAll();
}

........
}
然后在MapLayer的clearAll()里面会去销毁子节点GridSprite
/**
* @private
* 清理当前对象
*/
public function clearAll():void {
.......
var tGridSprite:GridSprite;
for (i = 0; i < _gridSpriteArray.length; i++) {
tGridSprite = _gridSpriteArray[i];
tGridSprite.clearAll();
}
.......
}
然后在GridSprite的clearAll方法里面,有一段代写错了,导致GridSprite节点没有被销毁,GridSprite的父节点却被销毁了,然后导致了屏幕变灰不能显示ui的问题
原来的代码:
/**
* 重置当前对象的所有属性
*/
public function clearAll():void {
if (_map) {
_map = null;
}
this.visible = false;
//aniSpriteArray为空的时候,导致自己没有被销毁,直接return了
if (aniSpriteArray == null) {
return;
}
var tAniSprite:TileAniSprite;
for (var i:int = 0; i < aniSpriteArray.length; i++) {
tAniSprite = aniSpriteArray[i];
tAniSprite.clearAll();
}
this.destroy();
relativeX = 0;
relativeY = 0;
isHaveAnimation = false;
aniSpriteArray = null;
drawImageNum = 0;
}
修改后代码:
/**
* 重置当前对象的所有属性
*/
public function clearAll():void {
if (_map) {
_map = null;
}
this.visible = false;
//修改了这里
if (aniSpriteArray) {
var tAniSprite:TileAniSprite;
for (var i:int = 0; i < aniSpriteArray.length; i++) {
tAniSprite = aniSpriteArray[i];
tAniSprite.clearAll();
}
}

this.destroy();
relativeX = 0;
relativeY = 0;
isHaveAnimation = false;
aniSpriteArray = null;
drawImageNum = 0;
}
希望LayaBox官方开放人员能改一下
已邀请:

w1114367261

赞同来自:

感谢!会进行反馈!感谢提醒!

要回复问题请先

商务合作
商务合作