按钮那些事儿

本文介绍了一个用于检查按钮透明部分的方法CheckAlphaPoint,并演示了如何使用Cocos2d-x创建一个带有触摸事件监听的按钮。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

检查按钮透明部分

bool CCMenu::CheckAlphaPoint(CCMenuItem* pChild, const CCPoint& point)
{
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    CCNode* selectSprite = ((CCMenuItemSprite*)pChild)->getSelectedImage(); 
    CCRenderTexture *renderer = CCRenderTexture::create(winSize.width, winSize.height);
    renderer->begin();

    bool visible = selectSprite->isVisible();
    if (visible) {
        selectSprite->visit();
    }
    else
    {
        selectSprite->setVisible(true);
        selectSprite->visit();
        selectSprite->setVisible(false);
    }

    GLubyte pixelColors[4];

#if ( CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)
    glReadPixels(point.x, point.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &pixelColors[0]);
#else
    glReadPixels(point.x, point.y, 1, 1, GL_ALPHA, GL_UNSIGNED_BYTE, &pixelColors[0]);
#endif

    int alpha = pixelColors[0];
    CCLOG(----alpha %d, alpha);

    renderer->end();

    if (alpha <= 30)
    {
       return true;
    }
    else
    {
        return false;
    }

}

创建一个按钮

bool Logo::init()
{
    if(!Layer::init())
        return false;

    auto logo = ECommonBg::createBg("cover.png");
    addChild(logo);



    auto btn = cocos2d::ui::Button::create("start_game.png","start_game.png");
    btn->setPosition(Vec2(WIN_WIDTH/2, WIN_HEIGHT* 0.3));
    btn->addTouchEventListener(this, toucheventselector(Logo::callBack));


    this->addChild(btn,4);
    return true;
}

void Logo::callBack(Ref* sender, TouchEventType b)
{
    log("callBack Called!~");

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值