1. SkewTo SkewBy
node朝X和Y方向的歪斜。SkewTo是SkewBy的父类。
1.1 成员变量 create方法
- // 两者成员变量一致
- float _skewX;
- float _skewY;
- float _startSkewX; // startWithTarget
- float _startSkewY;//
- float _endSkewX; // create参数
- float _endSkewY; //
- float _deltaX; // startWithTarget
- float _deltaY; //
SkewTo的_skewX和_skewY在构造函数默认为0。
SkewBy的_skewX和_skewY在init方法中用create的参数设置,即当前的斜值。还在startWithTarget方法中用到。
1.2 startWithTarget
SkewTo:
- ActionInterval::startWithTarget(target);
- _startSkewX = target->getSkewX();
当前X方向的斜值作为_startSkewX。
- if (_startSkewX > 0)
- {
- _startSkewX = fmodf(_startSkewX, 180.f);
- }
- else
- {
- _startSkewX = fmodf(_startSkewX, -180.f);
- }
- _deltaX = _endSkewX - _startSkewX;
X方向斜值要对+-180度求余,超过180度的斜值与求余后的斜值效果一致。(?)
重新计算_deltaX,使用了“就近原则”,同旋转动作一样:
- if (_deltaX > 180)
- {
- _deltaX -= 360;
- }
- if (_deltaX < -180)
- {
- _deltaX += 360;
- }
Y方向斜值要对+-360度求余(?)
- _startSkewY = target->getSkewY();
- if (_startSkewY > 0)
- {
- _startSkewY = fmodf(_startSkewY, 360.f);
- }
- else
- {
- _startSkewY = fmodf(_startSkewY, -360.f);
- }
- _deltaY = _endSkewY - _startSkewY;
// 就近原则- if (_deltaY > 180)
- {
- _deltaY -= 360;
- }
- if (_deltaY < -180)
- {
- _deltaY += 360;
- }
SkewBy:
设置的斜值加上开始的斜值作为_endSkewX。
用_skewX(create参数的斜值)对_deltaX进行设置可以理解。计算_endSkewX用不知道有何意义?在计算_deltaX之前用父类同名方法计算了_startSkewX和_deltaX,除了在父类方法计算_startSkewX之外,又有何意义?待解决。
- SkewTo::startWithTarget(target);
- _deltaX = _skewX;
- _deltaY = _skewY;
- _endSkewX = _startSkewX + _deltaX;
- _endSkewY = _startSkewY + _deltaY;