Cocos2dx项目启程二 之 封装属于我的按钮类

不知道为什么,很讨厌cocos2dx的 各菜单类,比如按钮:如果一张图片上就已经有按钮的几个状态了,我还是要创建多张资源图片,

最起码要指定这张图片上哪块区域是这个普通状态,哪块区域是那个选中状态。。。。于是,在这里,做了点加工,在一张图片上

如果有几个按钮状态,来实现多种按钮状态:在用我自己的按钮类的话只只需要 1 个函数就可以实现:


CMySpriteButton *pGameMainMenuBt= CMySpriteButton::create(“bt.png”,DIR_VERTICAL,2,this, menu_selector(SceneManger::menuCallback));//

 

#ifndef MY_SPRITE_BUTTON_H
#define MY_SPRITE_BUTTON_H

#include "common.h"
#include "MySprite.h"

#define MYBUTTON_ZORDER				3


//按钮状态枚举
enum eButtonState
{
	//普通状态
	STATE_NORMAL,
	//按下
	STATE_DOWN,
	//已选中状态
	STATE_SELECTED,
	//禁用该按钮
	STATE_DISABLE,
	//
	STATE_MAX
};
//资源切割方向
enum eImageDir
{
	//水平
	DIR_HORIZONTAL,
	//垂直
	DIR_VERTICAL
};


//@单图切割换帧 按钮
class CMySpriteButton : public CCLayer
{
private:
	//精灵资源
	CMySprite				m_sprImage;
	//调用
	CCNode*					m_pTarget;
	//回调
	SEL_MenuHandler			m_pfnCallBack;


private:
	CMySpriteButton(void);
	~CMySpriteButton(void);

	//接口
public:
	//create
	static CMySpriteButton* create( const char* pszResourceName, eImageDir eDir, unsigned char byStates, CCNode* pTarget, SEL_MenuHandler pfnCallBack );

	void setPositionX( float x );
	void setPositionY( float y );
	void setPosition(float x, float y);
	float getPositionY();
	float getPositionX();
	cocos2d::CCPoint& getPosition();

	bool init( const char* pszResourceName, eImageDir eDir, unsigned char byStates, CCNode* pTarget, SEL_MenuHandler pfnCallBack );

	void SetState(eButtonState eState);

	//重载
protected:
	void onEnter();
	bool ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent );
	void ccTouchEnded( CCTouch *pTouch, CCEvent *pEvent );
	void ccTouchesBegan( CCSet *pTouches, CCEvent *pEvent );
	void ccTouchesEnded( CCSet *pTouches, CCEvent *pEvent );

};

#endif


 



 

posted on 2013-09-03 19:26  you Richer  阅读(676)  评论(0编辑  收藏  举报