我正在製作一個工具,使用正方形遮蓋圖像。我想要發生的是有一個彈跳球擊中廣場,使他們消失。但是,removeChild命令不能正常工作。我將它設置爲用空影片剪輯填充圖像並着色它們。然而,當我點擊廣場時,我遇到了父母/孩子的問題。我一直在遇到這個錯誤。 「提供的DisplayObject必須是調用者的孩子。」我想不出一種很好的方法來將eventListeners分配給每個方格。我相信這很明顯。這是我的代碼。提前謝謝你removeChild正在刪除我所有的電影剪輯
編輯:如果我得到它的工作,它刪除廣場的所有實例,而不僅僅是我單擊的一個。
這裏是我的代碼
var mc:MovieClip = bgIMG;
var bd:BitmapData = new BitmapData(mc.width,mc.height);
bd.draw(mc);
var _img:Bitmap = new Bitmap(bd);
var _imgNodes:Array = [];
var _tiledImg:MovieClip = container_tiled_img;
var pad:int = 0;
var rows:int = 10;
var cols:int = 10;
var zero:Point = new Point();
createImgNodeGrid(rows, cols, pad);
pixelateNodes(_imgNodes);
function removeMC(e:MouseEvent)
{//removes the movie clip
trace(e.currentTarget.x);
stage.removeChild(e.currentTarget.parent.parent);
}
function pixelateNodes(nodes:Array = null):void
{
for each (var node:Bitmap in nodes)
{
node.bitmapData.fillRect(node.bitmapData.rect, avgColor(node.bitmapData));
}
}
function avgColor(src:BitmapData):uint
{
var A:Number = 0;
var R:Number = 0;
var G:Number = 0;
var B:Number = 0;
var idx:Number = 0;
var px:Number;
for (var x:int = 0; x < src.width; x++)
{
for (var y:int = 0; y < src.height; y++)
{
px = src.getPixel32(x,y);
A += px >> 24 & 0xFF;
R += px >> 16 & 0xFF;
G += px >> 8 & 0xFF;
B += px & 0xFF;
idx++;
}
}
A /= idx;
R /= idx;
G /= idx;
B /= idx;
return A << 24 | R << 16 | G << 8 | B;
}
function createImgNodeGrid(rows:int = 1, cols:int = 1, pad:Number = 0):void
{
var w:Number = _img.width/rows;
var h:Number = _img.height/cols;
var numNodes:int = rows * cols;
_imgNodes = [];
var nodeCount:int = 0;
for (var i:int = 0; i < rows; i++)
{
for (var j:int = 0; j < cols; j++)
{
// get area of current image node
var sourceRect:Rectangle = new Rectangle(i * w, j * h, w, h);
// copy bitmap data of current image node
var tempBd:BitmapData = new BitmapData(w,h,true);
tempBd.copyPixels(_img.bitmapData, sourceRect, zero);
// place image node bitmap data into sprite
var imgNode:Bitmap = new Bitmap(tempBd);
imgNode.x = i * (w + pad);
imgNode.y = j * (h + pad);
// store each image node
//_imgNodes.push(imgNode);
_imgNodes[nodeCount++] = imgNode;
// add each image node to the stage
_tiledImg.addChild(imgNode);
_tiledImg.addEventListener(MouseEvent.CLICK,removeMC);
}
}
}
非常感謝!因此,如果我想進行hitTest事件,我會添加它像 sprite.mouseChildren = false; \t \t \t sprite.addEventListener(MouseEvent.CLICK,removeMC); \t \t \t sprite.addEventListener(Event.ENTER_FRAME,checkHits,sprite); –
,但沒有最後一個參數sprite.addEventListener(Event.ENTER_FRAME,checkHits);當然checkHits會被調用的函數名稱。但我也會非常小心地在這樣的循環內使用enter frame事件。我寧願做stage.addEventListener(Event.ENTER_FRAME,checkHits);在checkHits裏面我會在那裏做測試。 –