第一段是初始化贝塞尔曲线,第二段是什么意思
void ActionBezierBy::InitWithTarget(RealObjectPtr target,
float duration,
const ccBezierConfig& c)
{
ActionBase::InitWithTarget(target,duration);
_config = c;
_previousPosition = _startPosition = target->GetPosition();
}
bool ActionBezierBy::isDone() const
{
return _elapsed >= _duration;
}
void ActionBezierBy::update(float time)
{
if (_target)
{
float xa = 0;
float xb = _config.controlPoint_1.x;
float xc = _config.controlPoint_2.x;
float xd = _config.endPosition.x;
float ya = 0;
float yb = _config.controlPoint_1.y;
float yc = _config.controlPoint_2.y;
float yd = _config.endPosition.y;
float x = bezierat(xa, xb, xc, xd, time);
float y = bezierat(ya, yb, yc, yd, time);
/*
#if CC_ENABLE_STACKABLE_ACTIONS
Vec2 currentPos = _target->getPosition();
Vec2 diff = currentPos - _previousPosition;
_startPosition = _startPosition + diff;
Vec2 newPos = _startPosition + Vec2(x,y);
_target->setPosition(newPos);
_previousPosition = newPos;
#else
*/
_target->SetPosition(_startPosition + SexyVector3(x,y,0));
//#endif
}
}
void ActionBezierTo::InitWithTarget(RealObjectPtr target,
float duration,
const ccBezierConfig& c)
{
//ActionBase::InitWithTarget(target,duration);
_toConfig = c;
ActionBezierBy::InitWithTarget(target,duration,c);
SexyVector2 start_pos = SexyVector2(_startPosition.x,_startPosition.y);
_config.controlPoint_1 = _toConfig.controlPoint_1 - start_pos;
_config.controlPoint_2 = _toConfig.controlPoint_2 - start_pos;
_config.endPosition = _toConfig.endPosition - start_pos;
}