1. 程式人生 > >cocos2dx 3.x 蒙板 遮罩 點選圓功能

cocos2dx 3.x 蒙板 遮罩 點選圓功能

//註冊觸控
    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 addChild
    DrawNode *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;
}
local stencil= cc.Sprite:create('res/mark.png')

local c_node = cc.ClippingNode:create()
c_node:setStencil(stencil)
c_node:setInverted(false)
c_node:setAlphaThreshold(0)

local sp = cc.Sprite:create('res/di.png')
c_node:addChild(sp)
layer:addChild(c_node)
c_node:setPosition(origin.x+visibleSize.width/2,origin.y+visibleSize.height/2)

相關推薦

cocos2dx 3.x 功能

//註冊觸控 EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = CC_CALLBACK_2(Hell

cocos2dx-3.2(35) ClippingNode

我的生活,我的點點滴滴!! 可以根據一個模板切割圖片的節點--ClippingNode。這個類提供了一種不規則切割圖片的方式,在這種方式以前,我們可以使用紋理類 自帶的setTextureRect函式來切割矩形區域,而新特性中提供的ClippingNode最大的不同之處就

egret 繪制倒計時

num UNC ddc splay radi 用法 pla math col 我們常看到技能圖標上面有一個灰色半透明的倒計時,這個怎麽做呢,下面請看代碼 1 /** 技能倒計時 */ 2 class SkillMask { 3 4 privat

cocos2dx 3.x 給Sprite新增

引言 程式截圖:   有時候,你在做遊戲時,可能需要一種方式來顯示精靈的某一部分(就是新增遮罩啦)。   一種方式就是使用另外一張圖片,叫做mask。你把mask圖片中間設定成白色,白色區域是被mask圖片的可見區域。之後這個白色區域會透明的。   然後,你可

cocos2dx 3.x 圖層滑鼠事件的遮蔽

場景:介面新增一個彈出層,阻止彈出層下面的滑鼠事件響應 auto sprite2 = Sprite::create("HelloWorld.png");  // sprite2為彈出層 sprite2->setPosition(Vec2(closeItem->g

【轉】 cocos2dx 3.x C++搭建protobuf環境

person ccf binding csdn bind taf protoc -cp strlen http://blog.csdn.net/ganpengjin1/article/details/50964961 Cocos2dx 裏面在網絡遊戲通信這一塊一般我們都會采

android隱藏虛擬導航欄-------cocos2dx 3.x

查到網上的說法 android 沉浸式狀態列, 百度百科。沉浸式就是要給使用者提供完全沉浸的體驗,使使用者有一種置身於虛擬世界之中的感覺。比如說現在大熱的VR就是主打的沉浸式體驗。 其實想實現的效果就是——————————–隱藏狀態列 一個Android應用程式的介面上其實是有很多

cocos2dx[3.x](3)——大鉅變3.x

cocos2d-x v3.0 釋出說明 原文地址https://github.com/fusijie/Cocos2dx-Release-Note/blob/master/cocos2d-x_v3.0_release_notes.md#%E7%8E%AF%E5%A

線性漸變實現

線性漸變、背景尺寸、定位、混合模式綜合實現蒙版遮罩 實現CSS3主要屬性: background: linear-gradient( dir, color1, color2,...); //先定義一個線型漸變 background-size: 400% 400%

Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(移動測試)

--[[ ClickAndMoveTest.lua 點選與移動 ]]-- -- 獲取螢幕尺寸 local size = cc.Director:getInstance():getWinSize() local layer = nil -- 層 local kTagSprite = 1 --精靈標記 loc

cocos2dx 3.x版本多邊形剛體

//多邊形的點: Point verts1[] = { Point(-146.5f, 155.1f), Point(-146.5f, -87.6f),

cocos2dx 3.x 生成的exe 模擬器無法執行(黑屏)

修改 SimulatorWin::run() 方法 如下: // load project config from command line args vector<string> args; for (int i = 0; i < __a

Cocos2d-X 3.0 ControlButton的加入以及事件的實現

1、在.h中加入標頭檔案 #include "extensions/cocos-ext.h" USING_NS_CC;  USING_NS_CC_EXT;   新增方法: void touchUpInside(Ref* pSender,Control::EventTy

cocos2dx 3.x 修改NDK_ROOT、ANDROID_SDK_ROOT、ANT_ROOT路徑

CMD到setup.py目錄 Python setup.py -h 檢視幫助: Options:   -h,--help            showthis help message and exit   -n NDK_ROOT, --ndkroot=NDK_ROOT

cocos2dx-3.x學習筆記二:隨機數的生成及注意問題

cocos2dx-3.x提供了一個用於生成【0,1)之間浮點數的巨集定義CCRANDOM_0_1 1. 巨集定義說明 首先檢視原始碼,定位分析: 1 2 3 4 /** @def CCRANDOM_0_1 returns a random floa

Cocos2d-x 3.0開發(三)互動的四種處理

1、概述    遊戲也好,程式也好,只有能與使用者互動才有意義。手機上的互動大致可以分為兩部分:點選和輸入。其中點選更為重要,幾乎是遊戲中全部的互動。在Cocos2d-x 3.0中,更改了dispatc

Cocos2dx 3.x 中 Lua socket 和 node.js 利用scoket互相通訊讀寫二進位制資料

第一部分,Lua socket如何讀寫二進位制資料。 cocos2dx 3.x 版本已經集成了lua socket所以可以直接使用無需自己整合。首先需要初始化lua socket 如下: socket = require("socket"); tcp

cocos2dx(3.X)中使用shader

一 shader的基本概念 1 什麼是shader shader即著色器,就是專門用來渲染3D圖形的一種技術。 通過shader,可以自己編寫顯示卡渲染畫面的演算法,使畫面更漂亮、更逼真。 2 shader分類 shader又分兩種,一種是

windows下cocos2dx 3.x編譯安卓工程

軟體準備 jdkeclipse+adt(或者adt-bundle,本文就是)android-sdk(adt-bundle自帶)android-ndkant保險起見,都裝32位的 建立專案 用python建立cocos2dx 3.x的專案,參看:http://blog.

Cocos2dx-3.x觸控事件之實現人機互動(三)

今天講自定義事件和加速計事件 先在標頭檔案完成以下宣告 virtual void onExit(); // 為了移除ListenerCustom中的監聽器_listener EventListe