Hack引擎源码几乎要改整个类

是否有其他更好的方法。

用 monkey patch

cc.ScrollView.prototype["_onMouseWheel"] = function (
    event: any,
    captureListeners: any
) {
	// code in here... to change only _onMouseWheel function
};

你这个方法里,如果涉及全局变量,则所有涉及全局变量的方法都要hack。我现在就是这个情况。

cc.ScrollView.prototype["_onMouseWheel"] = function (
    event: any,
    captureListeners: any
) {
	// code in here... to change only _onMouseWheel function

    //super
    cc.ScrollView.prototype["_onMouseWheel"].call( this, event, captureListeners );
};

引用cc.game.once(cc.game.EVENT_ENGINE_INITED, () => {
let SpineAssembler = sp.Skeleton[“assembler”];
SpineAssembler.prototype.fillBuffers = function (comp, renderer) {
let node = comp.node;
node._renderFlag |= cc[“RenderFlow”].FLAG_UPDATE_RENDER_DATA;
if (!comp._skeleton) return;
let nodeColor = node._color;
_nodeR = nodeColor.r / 255;
_nodeG = nodeColor.g / 255;
_nodeB = nodeColor.b / 255;
_nodeA = nodeColor.a / 255;

    _useTint = comp.useTint || comp.isAnimationCached();
    _vertexFormat = _useTint ? VFTwoColor : VFOneColor;
    // x y u v color1 color2 or x y u v color
    _perVertexSize = _useTint ? 6 : 5;

    _node = comp.node;
    _buffer = renderer.getBuffer("spine", _vertexFormat);
    _renderer = renderer;
    _comp = comp;

    _mustFlush = true;
    _premultipliedAlpha = comp.premultipliedAlpha;
    _multiplier = 1.0;
    _handleVal = 0x00;
    _needColor = false;
    _vertexEffect = comp._effectDelegate && comp._effectDelegate._vertexEffect;

    if (nodeColor._val !== 0xffffffff || _premultipliedAlpha) {
        _needColor = true;
    }

    if (_useTint) {
        _handleVal |= FLAG_TWO_COLOR;
    }

    let worldMat = undefined;
    if (_comp.enableBatch) {
        worldMat = _node._worldMatrix;
        _mustFlush = false;
        _handleVal |= FLAG_BATCH;
    }
需要在这里修改代码.........

    if (comp.isAnimationCached()) {
        // Traverse input assembler.
        this.cacheTraverse(worldMat);
    } else {
        if (_vertexEffect) _vertexEffect.begin(comp._skeleton);
        this.realTimeTraverse(worldMat);
        if (_vertexEffect) _vertexEffect.end();
    }
需要在这里修改代码.........

    // sync attached node matrix
    renderer.worldMatDirty++;
    comp.attachUtil._syncAttachedNode();

    // Clear temp var.
    _node = undefined;
    _buffer = undefined;
    _renderer = undefined;
    _comp = undefined;
    _vertexEffect = null;
};

});

老六们,我需要hook的是这个方法,需要在方法里新增几行我需要的代码。
而hack这个方法,必然需要hack所有这个方法里用到的全局变量。例如这些变量

这些变量涉及的方法要改动,则基本需要修改整个类