是否有其他更好的方法。
用 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所有这个方法里用到的全局变量。例如这些变量
这些变量涉及的方法要改动,则基本需要修改整个类