麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

cocos2d-x中實現不規則按鈕的點擊效果

2019-11-06 09:34:43
字體:
來源:轉載
供稿:網友

先說一點,這是從別人那里扒來的,親測有效覺得不錯,分享一下:

原理很簡單,就是判斷按鈕圖片的點擊區域 像素點透明度是不是0,需要修改源代碼;

我拿cocos2dx 3.10的版本(xcode環境)舉例:

第一步,新建一個cocos項目,找到cocos的源代碼中的Widget,它在ui 》base 》UIWidget.h文件中,在Widget類的public中添加三個函數:

virtual bool AlphaTouchCheck(const Vec2 &point);

virtual bool getAlphaTouchEnable();

virtual void setAlphaTouchEnable(bool isAlphaTouch);

然后再添加一個布爾型變量:

bool _isAlphaTouchEnable;

在UIWidget.cpp文件中實現:

bool Widget::AlphaTouchCheck(const Vec2 &point)

    {

        returntrue;

    }

bool Widget::getAlphaTouchEnable()

    {

        return_isAlphaTouchEnable;

    }

void Widget::setAlphaTouchEnable(bool isAlphaTouch)

    {

        _isAlphaTouchEnable = isAlphaTouch;  

    }

第二步,找到Button的源代碼,在ui 》widgets 》UIButton.h中重載函數bool AlphaTouchCheck(constVec2& point); 在UIbutton.cpp中實現:

bool Button::AlphaTouchCheck(const Vec2& point)

    {

        if (getAlphaTouchEnable())

        {

            Image* normalImage =newImage();

            normalImage->initWithImageFile(_normalFileName);//_normalFileName是button默認的那張圖片路徑

            auto data = normalImage->getData();

            if (data ==NULL)

            {

                returntrue;

            }

            auto locationInNode =this->convertToNodeSpace(point);

            int pa =4 * ((normalImage->getHeight() - (int)(locationInNode.y) -1) * normalImage->getWidth() + (int)(locationInNode.x)) +3;

            unsignedint ap = data[pa];

            if (ap <20)//這里判斷透明度,小于20就判斷為點擊無效,課根據自己的需要修改為0等等..

            {

                CC_SAFE_DELETE(normalImage);

                returnfalse;

            }

            else

            {

                CC_SAFE_DELETE(normalImage);

                returntrue;  

            }  

        }  

        returntrue;  

    }

第三步:比較重要,在在ui 》base 》UIWidget.cpp文件中找到boolWidget::onTouchBegan(Touch *touch,Event *unusedEvent),在

_touchBeganPosition = touch->getLocation();這一句代碼后面添加

if(!AlphaTouchCheck(_touchBeganPosition))

        {

            return false;

        }

ok,完成。源代碼修改到這里結束;

然后基本沒什么,就是Button的正常使用,要注意一點的是,這個button的點擊效果有個開關:setAlphaTouchEnable(bool ); 

測試在HelloWorld.cpp中添加一個Button,選一個不規則的圖片作為默認按鈕圖,代碼:

Button*s = Button::create("testbtn.png");//圖片中間區域透明

s->addTouchEventListener(this,toucheventselector(HelloWorld::btnclick));

s->setPosition(Vec2(300,200));

addChild(s);

s->setAlphaTouchEnable(true);//false為關閉該功能,和普通button一樣,點擊中間區域按鈕后執行btnclick;true為開啟,點擊中間區域后不進入btnclick函數;

voidHelloWorld::btnclick(Ref*r,cocos2d::ui::TouchEventType t)

{

    CCLog("Log:%s" ,"click!"); 

}

附加是我測試使用的圖片,中間是空的


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲成人高清在线观看 | 久久99精品久久久久久小说 | 精品久久久久久国产三级 | 媚药按摩痉挛w中文字幕 | 最新一区二区三区 | 一本一道久久久a久久久精品91 | 成人在线观看地址 | 国产va在线观看免费 | 午夜爽爽爽男女免费观看hd | 一本视频在线观看 | 欧美色大成网站www永久男同 | 久久久久久久.comav | 久久精品中文字幕一区二区三区 | 操你啦免费视频 | 成人不卡免费视频 | 一级黄色毛片子 | 欧洲伊人网 | 在线亚州 | 爱爱视频天天干 | 国产98色| 欧美激情 在线播放 | 色污视频在线观看 | 日韩av成人| 国产wwww| 午夜视频在线免费播放 | 九九热精品视频在线播放 | 欧美18—19sex性护士中国 | 2021狠狠操| 国产无限资源在线观看 | 欧美成人精品不卡视频在线观看 | 免费一级特黄做受大片 | 免费播放欧美毛片 | 久久蜜桃精品一区二区三区综合网 | 久久久久久久久国产 | av一二三四区 | 成人毛片视频免费看 | 色视频在线观看 | 爱高潮www亚洲精品 欧美黄色一级片视频 | 毛片免费视频观看 | 狠狠干天天操 | 性少妇videosexfreexx入片 |