使用C++11一些新特性将上篇的自定义Button重构
//
// CustomButton.h
// CustomButton
//
// Created by Forest on 16/5/6.
//
//
#ifndef __CustomButton__CustomButton__
#define __CustomButton__CustomButton__
#include <stdio.h>
#include "cocos2d.h"
#include <functional>
#include <algorithm>
USING_NS_CC;
enum class ButtonType{ STANDARD, CHANGE_IMAGE, SHAKE };
enum class TouchState{ Began, Moved, Ended };
class CustomButton;
typedef std::function<void(CustomButton*)> buttonCallBack;
class CustomButton:public Node{
private:
Sprite* m_normalImage;
Sprite* m_selectedImage;
ButtonType m_type;
buttonCallBack m_callBack;
Touch* m_touch;
bool m_isInside;
Vec2 m_beganPoint;
EventListenerTouchAllAtOnce* m_listener;
CustomButton();
~CustomButton();
bool init(const std::string& normalImage,const buttonCallBack& callBack);
bool initChangeImageButton(const std::string& normalImage,const std::string& selectedImage,const buttonCallBack& callBack);
bool isTouchInside(Touch* touch);
void executeEvent();
void standardEvent();
void changeImageEvent(TouchState state);
void shakeEvent(TouchState state);
void touchBegan(const std::vector<Touch*>& touches,Event* event);
void touchMoved(const std::vector<Touch*>& touches,Event* event);
void touchEnded(const std::vector<Touch*>& touches,Event* event);
public:
static CustomButton* createButton(const std::string& normalImage,const buttonCallBack& callBack);
static CustomButton* createChangeImageButton(const std::string& normalImage,const std::string& selectedImage,const buttonCallBack& callBack);
static CustomButton* createShakeButton(const std::string& normalImage,const buttonCallBack& callBack);
void startButton();
void stopButton();
void setButtonType(ButtonType type);
};
#endif /* defined(__CustomButton__CustomButton__) */
//
// CustomButton.cpp
// CustomButton
//
// Created by Forest on 16/5/6.
//
//
#include "CustomButton.h"
CustomButton::CustomButton():m_callBack(nullptr),m_isInside(