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学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • Cocos2d-x学习(一):HelloWorld
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d 设置屏幕默认方向
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
  • cocos2d-x学习笔记(15)--地图的使用(TMX)
  • cocos2dx在xcode下开发,编译到android上(2)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1