//注冊觸摸EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan,this);listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved,this);listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded,this);listener->setSwallowTouches(true);_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);//創建一個遮罩LayerColor *m_pLyaerColor = LayerColor::create(ccc4(0, 0, 0, 110));//創建剪裁節點ClippingNode *pClip = ClippingNode::create();pClip->setInverted(true);//是否反向,true 圓是透明,其他是黑, false 圓是黑,其他透明 addChild(pClip);//將遮罩添加到裁剪節點上pClip->addChild(m_pLyaerColor);//繪制圓區域//設置參數ccColor4F red = ccc4f(1, 0, 0, 1);float radius = 55.0f;//圓的半徑const int pCount = 200;//頂點數,將圓看成是200邊型float angel = 2.0f * (float)M_PI / pCount;//兩個頂點與中心的夾角(弧度) Point m_vPoint[pCount]; for (int i = 0; i < pCount; i++){float radian = i * angel;//弧度m_vPoint[i].x = radius * cosf(radian);//頂點X坐標m_vPoint[i].y = radius * sinf(radian);//頂點Y坐標 }//繪制多邊形//注意不要將pStencil addChildDrawNode *pStencil = DrawNode::create();pStencil->drawPolygon(m_vPoint, pCount, red, 0, red);//繪制這個多邊型pStencil->setPosition(Vec2(visibleSize.width /2 , visibleSize.height /2));//將這個圓形從裁剪節點上面摳出來, Stencil是模版的意思pClip->setStencil(pStencil);
?
?
bool HelloWorld::onTouchBegan(Touch *touch, Event *event){Size size = Director::getInstance()->getWinSize();Vec2 location = touch->getLocation();//獲取點擊的坐標float b = abs(location.x - size.width / 2);//獲取絕對值float c = abs(location.y - size.height / 2);//坐標x.y - 圓心x,y size/2是圓心.if (b <= 55.0f && c <= 55.0f){log("dianjidaole");//小于55 點擊到了圓return true; }log("meiyou");return false; }
?