Cocos2d-x 自定义按钮类控制精灵攻击----之游戏开发《赵云要格斗
来源:未知 责任编辑:责任编辑 发表时间:2015-09-09 15:29 点击:次
本篇要讲讲怎么自定义按钮类,并通过这个按钮类的对像来控制精灵的攻击。在看本篇之前最好先看看上一篇
Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发《赵云要格斗》,要素材和项目代码的把邮箱留下吧,因为这个项目还没弄完,我一直在改。
精灵的攻击也是一个动画,只不过,这个动画只播放一次,相当于在界面上加一个按钮,然后你点一次按钮,精灵就播放一次动画。
一、自定义按钮类
按钮可以用COCOS2D-X自带的,想着方便一点,我就自己封装了一个按钮类ControlButton,在里面添加一个//按钮控件变量CCControlButton* controlBtn;并对其添加相应的回调事件即可实现我们自己封装的按钮类
#ifndef __ControlButton_H__ #define __ControlButton_H__ #include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC; USING_NS_CC_EXT; //用于标识当前按钮的状态 typedef enum{ touch_begin, touch_down, touch_up, }tagForTouch; class ControlButton :public CCNode { public: ControlButton(); ~ControlButton(); CREATE_FUNC(ControlButton); //创建按钮,其中name_png为按钮的背景图片,button_title为按钮图片上要显示的文字,num为文字的透明度0-100,0为透明 void CreateButton(const char* name_png,const char* button_title="0",unsigned int num=0); //绑写按钮事件 void BindButtonEven(); /* 当鼠标处于按下并曾经点中按钮时,则触发一次 */ void touchDownAction(CCObject* pSender, CCControlEvent event); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发一次 */ void touchDragEnter(CCObject* pSender, CCControlEvent event); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发一次 */ void touchDragExit(CCObject* pSender, CCControlEvent event); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发,只要达到条件,就不断触发 */ void touchDragInside(CCObject* pSender, CCControlEvent event); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发,只要达到条件,就不断触发 */ void touchDragOutside(CCObject* pSender, CCControlEvent event); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围内,则触发一次 */ void touchUpInside(CCObject* pSender, CCControlEvent event); /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围外,则触发一次 */ void touchUpOutside(CCObject* pSender, CCControlEvent event); /* 暂时没有发现能用鼠标触发这个事件的操作,看了注释,应该是由其它事件中断按钮事件而触发的 */ void touchCancel(CCObject* pSender, CCControlEvent event); //是否按下按钮 bool isTouch; private: //按钮控件变量 CCControlButton* controlBtn; }; #endif
ControlButton.cpp文件
#include "ControlButton.h" ControlButton::ControlButton():controlBtn(NULL),isTouch(false) { } ControlButton::~ControlButton() { } void ControlButton::CreateButton(const char* name_png,const char* button_title,unsigned int num) { //得到按钮图片的大小 CCScale9Sprite* btn = CCScale9Sprite::create(name_png); CCLOG("%f",btn->getContentSize().width); CCLOG("%f",btn->getContentSize().height); int png_height=static_cast(btn->getContentSize().height); int png_width=static_cast ( btn->getContentSize().width); btn->release(); //要显示的图片大小 CCRect rect = CCRectMake(0,0,png_width,png_height); //图片的大小 CCRect rectInsets = CCRectMake(1,1,1,1); //left,right,width,height //按钮标题,Marker Felt为字体类型,png_height为字体高度 CCLabelTTF *title = CCLabelTTF::create(button_title, "Marker Felt",png_height-10); title->setOpacity(num);//设置可见度 //正常状态下的按钮图片 CCScale9Sprite *btnNormal = CCScale9Sprite::create(name_png,rect,rectInsets); //创建按钮 controlBtn = CCControlButton::create(title,btnNormal); this->addChild(controlBtn); //绑定事件 BindButtonEven(); } void ControlButton::BindButtonEven() { if(!controlBtn) return; controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchDownAction),CCControlEventTouchDown); controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchDragEnter),CCControlEventTouchDragEnter); controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchDragExit),CCControlEventTouchDragExit); controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchDragInside),CCControlEventTouchDragInside); controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchDragOutside),CCControlEventTouchDragOutside); controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchUpInside),CCControlEventTouchUpInside); controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchUpOutside),CCControlEventTouchUpOutside); controlBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(ControlButton::touchCancel),CCControlEventTouchCancel); } /* 当鼠标处于按下并曾经点中按钮时,则触发一次 */ void ControlButton::touchDownAction(CCObject* pSender, CCControlEvent event) { isTouch=true; } /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发一次 */ void ControlButton::touchDragEnter(CCObject* pSender, CCControlEvent event) { } /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发一次 */ void ControlButton::touchDragExit(CCObject* pSender, CCControlEvent event) { } /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标进入按钮范围,则触发,只要达到条件,就不断触发 */ void ControlButton::touchDragInside(CCObject* pSender, CCControlEvent event) { } /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标离开按钮范围,则触发,只要达到条件,就不断触发 */ void ControlButton::touchDragOutside(CCObject* pSender, CCControlEvent event) { } /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围内,则触发一次 */ void ControlButton::touchUpInside(CCObject* pSender, CCControlEvent event) { isTouch=false; } /* 当鼠标处于按下并曾经点中按钮的状态下,鼠标松开且在按钮范围外,则触发一次 */ void ControlButton::touchUpOutside(CCObject* pSender, CCControlEvent event) { } /* 暂时没有发现能用鼠标触发这个事件的操作,看了注释,应该是由其它事件中断按钮事件而触发的 */ void ControlButton::touchCancel(CCObject* pSender, CCControlEvent event) { }
相关新闻>>
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3
- Cocos2d-x 3.2 大富翁游戏项目开发-第八部分 角色按路径行走
- 结合cocos2d-x开发配置sublime text
- cocos2d-x开发: 如何从项目中分离出接口范例
- cocos2d-x在iOS/Android双平台上嵌入WebView
- Cocos2d-x 3.2 大富翁游戏项目开发-第十部分实现人物轮流行走
- cocos2d-x开发: 一切应该从配置文件读取开始
- 使用python创建cocos2d-x项目
- cocos2d-x 缓存
- quick-cocos2d-x教程11:实现http通信,并与网站php对接,可实现
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>