// cocos2dx
int cross = 0;
CCPoint pos = getPosition();
CCPoint point_origin = CCPointMake(pos.x + m_rectTouch.origin.x, pos.y + m_rectTouch.origin.y);
int valid_pointnum = m_curShapePoint->GetValidPointNum();
for (int i = 0; i < valid_pointnum; ++i)
{
CCPoint p1 = ccpAdd(ccp(m_curShapePoint->m_fShapePosX[i], m_curShapePoint->m_fShapePosY[i]), point_origin);
CCPoint p2 = ccpAdd(ccp(m_curShapePoint->m_fShapePosX[(i + 1) % valid_pointnum], m_curShapePoint->m_fShapePosY[(i + 1) % valid_pointnum]), point_origin);
if (p1.y == p2.y)
continue;
if (point.y < MIN(p1.y, p2.y))
continue;
if (point.y >= MAX(p1.y, p2.y))
continue;
float x = (float)(point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x;
if (x > point.x)
cross++;
}
return (cross % 2 == 1);