ActionScript 2中BitmapData容器深度显示异常问题求助
ActionScript 2 BitmapData 深度显示问题解决方案
问题核心
将BitmapData通过attachBitmap添加到_loader容器后,Bitmap始终被backgroundType、exitType等同级容器遮挡,仅通过swapDepths(_root.getNextHighestDepth())将_loader移到根容器最顶层才有效,但需要让BitmapData在windowContainer内部层级显示在最前方。
关键误区解析
- attachBitmap深度参数错误:
attachBitmap的第二个参数是相对于父容器(_loader)的内部深度,而非windowContainer的深度。直接传入this.windowContainer.getNextHighestDepth()只会让Bitmap在_loader内部层级很高,但_loader本身在windowContainer中的深度仍可能低于其他同级容器,导致遮挡。 - swapDepths目标深度误解:
this.windowContainer.getNextHighestDepth()返回的是windowContainer内当前可用的最高深度,理论上用它交换_loader的深度应该能让_loader成为windowContainer的最顶层子级。若无效,大概率是windowContainer内部存在深度冲突,或后续创建的容器抢占了更高深度。
修正方案
方案一:强制将_loader设为windowContainer内部最高深度
修改loadImage函数,在最后将_loader的深度设置为windowContainer的最高可用深度,确保它在所有同级容器之上:
function loadImage(pSource, pWidth, pHeight) { if (typeof (pSource) == "movieclip") { this._loader = pSource; this._loader._width = pWidth; this._loader._height = pHeight; } else if (pSource instanceof flash.display.BitmapData) { // 此处深度参数用_loader内部的最高值即可,保证Bitmap在_loader内部显示正常 this._loader.attachBitmap(pSource, this._loader.getNextHighestDepth(), "auto", true); this._loader._width = pWidth; this._loader._height = pHeight; } else { this._loader.loadMovie(pSource); this._loader._width = pWidth; this._loader._height = pHeight; } // 关键:将_loader设置为windowContainer内的最高深度 var targetDepth = this.windowContainer.getNextHighestDepth(); this._loader.swapDepths(targetDepth); // 若上述代码仍无效,可尝试手动设置一个足够高的固定深度(需确保高于所有同级容器) // this._loader.swapDepths(1000); }
方案二:调整容器创建顺序
如果exitType、minimizeType等遮挡容器是在_loader之后创建的,可调整创建顺序,最后创建_loader,这样它的天然深度就是windowContainer内的最高值,无需额外交换深度:
// 先创建backgroundType、exitType、minimizeType等容器 this.backgroundType = this.windowContainer.createEmptyMovieClip("backgroundContainer", this.windowContainer.getNextHighestDepth()); // ... 其他容器创建代码 ... // 最后创建_loader,确保它的深度最高 this._loader = this.windowContainer.createEmptyMovieClip("__imageLoader", this.windowContainer.getNextHighestDepth()); this._loader._x = 50.75; this._loader._y = 49.55;
验证方法
可通过打印深度值排查层级问题:
trace("backgroundType深度:" + this.backgroundType.getDepth()); trace("_loader深度:" + this._loader.getDepth()); // 打印其他遮挡容器的深度,确认_loader的深度是否低于它们
内容的提问来源于stack exchange,提问作者user28541024
相关产品推荐
相关产品推荐

