欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Cocos2d-x3.0 不规则Button

发布时间:2025/6/17 编程问答 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Cocos2d-x3.0 不规则Button 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

这是我參照之前在iOS项目中用过的一个不规则形状按钮的第三方Button,这里用Cocos2d-x实现一个类似功能的按钮。

原文地址:http://blog.csdn.net/qqmcy/article/details/26161339

代码下载:http://download.csdn.net/detail/qqmcy/7365843

用法:

.h

// // TestScene.h // maptest // // Created by 杜甲 on 14-5-18. // //#ifndef __maptest__TestScene__ #define __maptest__TestScene__#include "cocos2d.h" #include "ui/CocosGUI.h" #include "DJShapeButton.h" USING_NS_CC;class TestScene :public Layer,public DJShapeButtonDelegate{public:static Scene* createScene();virtual bool init();CREATE_FUNC(TestScene);void buttonCallBack(DJShapeButton* sender);};#endif /* defined(__maptest__TestScene__) */


DJShapeButton* djShapeBtn = DJShapeButton::create("res/red/1300_r.png");djShapeBtn->setDelegate(this);//设置tagdjShapeBtn->setShapeBtnTag(1000);djShapeBtn->setPosition(Point(0, 40));addChild(djShapeBtn);


回调函数
void TestScene::buttonCallBack(DJShapeButton *sender) {log("%d",sender->getTag()); }


DJShapeButton.h不规则形状Button类

// // DJShapeButton.h // maptest // // Created by 杜甲 on 14-5-18. // //#ifndef __maptest__DJShapeButton__ #define __maptest__DJShapeButton__class DJShapeButton;class DJShapeButtonDelegate {public:virtual void buttonCallBack(DJShapeButton* sender) = 0;};#include "cocos2d.h" #include "ui/CocosGUI.h"USING_NS_CC;class DJShapeButton :public ui::Layout{public:static DJShapeButton* create(const std::string& normalImage);CC_SYNTHESIZE(DJShapeButtonDelegate*, _delegateBtn, Delegate);virtual bool init(const std::string& normalImage);CC_SYNTHESIZE_RETAIN(Sprite*, shapeBtn, ShapeBtn);void setShapeBtnTag(int tag); private:bool isSwallow ;};#endif /* defined(__maptest__DJShapeButton__) */
DJShapeButton.cpp

// // DJShapeButton.cpp // maptest // // Created by 杜甲 on 14-5-18. // //#include "DJShapeButton.h" DJShapeButton* DJShapeButton::create(const std::string &normalImage) {DJShapeButton *pRet = new DJShapeButton();if (pRet && pRet->init(normalImage)){pRet->autorelease();return pRet;}else{delete pRet;pRet = NULL;return NULL;}} bool DJShapeButton::init(const std::string &normalImage) {bool bRet = false;do {CC_BREAK_IF(!ui::Layout::init());Image* myImg = new Image();myImg->initWithImageFile(normalImage);Texture2D* temp = new Texture2D();temp->initWithImage(myImg);shapeBtn =Sprite::createWithTexture(temp);log("%f,%f",shapeBtn->getAnchorPoint().x ,shapeBtn->getAnchorPoint().y);log("width = %f,height = %f",shapeBtn->getContentSize().width , shapeBtn->getContentSize().height);addChild(shapeBtn);this->setSize(shapeBtn->getContentSize());shapeBtn->setPosition(Point(getSize().width / 2, getSize().height / 2));auto listener1 = EventListenerTouchOneByOne::create();listener1->onTouchBegan = [=](Touch* touch, Event* event){auto target = static_cast<Sprite*>(event->getCurrentTarget());Point locationInNode = target->convertToNodeSpace(touch->getLocation());Color4B c = {0,0,0,0};Point pt = Point(locationInNode.x, target->getContentSize().height - locationInNode.y);Size s = target->getContentSize();Rect rect = Rect(0, 0, s.width, s.height);if (rect.containsPoint(locationInNode)) {log("sprite began... x = %f, y = %f", locationInNode.x, locationInNode.y);unsigned int x = pt.x, y = pt.y;unsigned char* data = myImg->getData();unsigned int* pixel = (unsigned int*)data;pixel = pixel + (y * 116) + x;c.r = *pixel & 0xff;c.g = (*pixel >> 8 ) & 0xff;c.b = (*pixel >> 16) & 0xff;c.a = (*pixel >> 24) & 0xff;log("8888888888%d",c.a);if (c.a <= 4) {isSwallow = false;}else{isSwallow = true;}}else{isSwallow = false;}listener1->setSwallowTouches(isSwallow);return isSwallow;};listener1->onTouchEnded = [=](Touch* touch, Event* event){if (_delegateBtn != nullptr) {_delegateBtn->buttonCallBack(this);}};_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, shapeBtn);bRet = true;} while (0);return bRet; }void DJShapeButton::setShapeBtnTag(int tag) {shapeBtn->setTag(tag);setTag(tag);}


转载于:https://www.cnblogs.com/mqxnongmin/p/10895835.html

总结

以上是生活随笔为你收集整理的Cocos2d-x3.0 不规则Button的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。