pointApplyAffineTransform 函数真心令人费解

	/**
	!#en Apply the affine transformation on a point.
	!#zh 对一个点应用矩阵变换。
	@param point or x.
	@param transOrY transform matrix or y.
	@param t transform matrix or y. 
	*/
	pointApplyAffineTransform(point: Vec2|number, transOrY: AffineTransform|number, t: AffineTransform): Vec2;	

建议不要写这种杂合函数,完全可以分成几个函数去写,就算写了,也起码要解释一下。
在AffineTransform类的内部函数中的这样函数,还带有一个AffineTransform参数,这怎么理解?

你可以理解为这样

如果你第一个参类型是Vec2, 那么你只需在填一个类型为AffineTransform的参数 t,如果你第一个参数是x,第二个是y,那么你就要填第三个参数t

t === undefined,就是你的t没填,没填就意味着你只填了2个参数, 就是1个Vec2的point,一个t

t !== undefined,就直接拿t的值来用, 就意味着你填了t, 你的参数是3个, 1个x,1个y, 1个t

感谢回复,请问下,这些函数中都带了一个自身AffineTransform,是为了避免传入错误的上下文this是嘛?

你是指这里么[quote=“Andrew, post:1, topic:56421”]

(point: Vec2|number, transOrY: AffineTransform|number, t: AffineTransform)
[/quote]

是的,类似的函数有很多:
/**
!#en Return true if an affine transform equals to another, false otherwise.
!#zh 判断两个矩阵是否相等。
@param t1 t1
@param t2 t2
/
affineTransformEqualToTransform(t1: AffineTransform, t2: AffineTransform): boolean;
/
*
!#en Get the invert transform of an AffineTransform object.
!#zh 求逆矩阵。
@param t t
*/
affineTransformInvert(t: AffineTransform): AffineTransform;
都带有一个AffineTransform参数,我想这个应该就是调用者自身吧?

你可以把它看成是这样的

pointApplyAffineTransform(point: Vec2 | number, transOrY: AffineTransform | number, t: undefined | AffineTransform)

如果你传的第一个参数是Vec2类型的值,那么你第二个参数就要传AffineTransform类型的值,你第三个参数就是不用传

比如上面的求逆矩阵那个函数,也带有一个仿射变换对象参数。
一个仿射变换应该对应一组矩阵,如果求逆矩阵的话,直接访问自己的数据就可以完成,为什么还要另外的一个仿射变换对象?

这个传法我已经知道了,但是不理解的是为什么需要第二个仿射变换对象,因为自身就是放射变换对象,它访问自己的数据就可以对一个目标向量完成位置、缩放、旋转等变换。

你求逆矩阵,你肯定要有一个参考的矩阵啊,当然要传1个类型为AffineTransform的矩阵进去, 通过那个方法它会返回一个逆矩阵

你现在是通过方法来求逆矩阵,你肯定要传一个矩阵给方法,不然方法返回给你哪个矩阵的逆矩阵?

    let t: cc.AffineTransform = new cc.AffineTransform();
    t.affineTransformInvert(t);

这里的t不就是自身么,它是个对象,不是就能访问自身的属性么,返回的逆矩阵就是自身的逆矩阵。应该不需要再次传入t才对。

不是cc.affineTransformInvert(t)么

我用的是TS,你用的应该是JS全局方法,我这边用的是类方法,它应该是为了兼容到js,并且防止出现混轮的this上下文,保留了那个参数,这样它方便内部处理。

这就没法帮你了,没搞过

没事,已经知道问题了,感谢!!