override public void Draw(FairyBatch batch) { base.Draw(batch); if (_paintingMode != 0 && paintingGraphics.texture != null) { batch.PushRenderTarget(paintingGraphics.texture, Vector2.Transform(Vector2.Zero, _localToWorldMatrix) + new Vector2(_paintingMargin.left, _paintingMargin.top)); } if (_clipRect != null) { //在这里可以直接使用 _localToWorldMatrix, 因为已经更新 Rectangle clipRect = (Rectangle)_clipRect; Matrix mat = Matrix.Identity; ToolSet.TransformRect(ref clipRect, ref _localToWorldMatrix, ref mat); batch.EnterClipping(clipRect); } float savedAlpha = batch.alpha; batch.alpha *= this.alpha; bool savedGrayed = batch.grayed; batch.grayed = batch.grayed || this.grayed; int cnt = _children.Count; for (int i = 0; i < cnt; i++) { DisplayObject child = _children[i]; if (child.visible) { child.Draw(batch); } } if (_clipRect != null) { batch.LeaveClipping(); } if (_paintingMode != 0 && paintingGraphics.texture != null) { batch.PopRenderTarget(); batch.Draw(paintingGraphics, 1, false, _blendMode, ref _localToWorldMatrix, _filter); } batch.alpha = savedAlpha; batch.grayed = savedGrayed; }