首页 > 代码库 > Cocos2d-x3.0 不规则Button
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); //设置tag djShapeBtn->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 = http://www.mamicode.com/myImg->getData();>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。