void CCClipOut::update(float time) { CCClippingNode* clipper = (CCClippingNode*)getTarget(); CCDrawNode* stencil = (CCDrawNode*)clipper->getStencil(); // clear stencil->clear(); // build polygon float distance = m_distance * (1 - time); if(distance < FLT_EPSILON) { CCPoint v[] = { CCPointZero, CCPointZero, CCPointZero, CCPointZero }; stencil->drawPolygon(v, 4, cc4fGREEN, 0, cc4fTRANSPARENT); } else { CCPoint v[] = { m_p1, m_p2, ccp(m_p2.x + distance * m_cos, m_p2.y + distance * m_sin), ccp(m_p1.x + distance * m_cos, m_p1.y + distance * m_sin) }; stencil->drawPolygon(v, 4, cc4fGREEN, 0, cc4fTRANSPARENT); } }
void CCClipIn::update(float time) { CCClippingNode* clipper = (CCClippingNode*)getTarget(); CCDrawNode* stencil = (CCDrawNode*)clipper->getStencil(); // clear stencil->clear(); // build polygon float distance = m_distance * time; CCPoint v[] = { m_p1, m_p2, ccp(m_p2.x + distance * m_cos, m_p2.y + distance * m_sin), ccp(m_p1.x + distance * m_cos, m_p1.y + distance * m_sin) }; stencil->drawPolygon(v, 4, cc4fGREEN, 0, cc4fTRANSPARENT); }