使用C++委托实现全方向的摇杆

本文介绍了如何使用C++通过委托方式实现一个全方向的摇杆控制,包括摇杆类的设计,角色类的接收及在实际场景中的应用,最终展示了运行效果。
摘要由CSDN通过智能技术生成

1.摇杆类

//
//  Rocker.hpp
//  Rocker
//
//  Created by Forest on 16/7/11.
//
//

#ifndef Rocker_hpp
#define Rocker_hpp

#include <stdio.h>

#include "cocos2d.h"
USING_NS_CC;

class Rocker;

class RockerDelegate{
public:
    virtual void rockerTouchBegan(Rocker* rocker,const Vec2& normalize) = 0;
    virtual void rockerTouchMoved(Rocker* rocker,const Vec2& normalize) = 0;
    virtual void rockerTouchEnded(Rocker* rocker,const Vec2& normalize) = 0;
};

class Rocker : public Node {

    Rocker();
    ~Rocker();

    Sprite* m_rocker;
    Sprite* m_rockerBG;
    Touch* m_touch;
    EventListenerTouchAllAtOnce* m_listener;

    bool isTouchInside(Touch* touch);

    void touchBeganRocker(const Vec2& normalize);
    void touchMovedRocker(const Vec2& normalize);
    void touchEndedRocker(const Vec2& normalize);

    void touchesBegan(const std::vector<Touch*>& touches, Event* event);
    void touchesMoved(const std::vector<Touch*>& touches, Event* event);
    void touchesEnded(const std::vector<Touch*>& touches, Event* event);

public:

    static Rocker* createRocker(const std::string& rockerImage,const std::string& rockerBGImage);

    bool initRocker(const std::string& rockerImage,const std::string& rockerBGImage);

    void startRocker();
    void stopRocker();

    CC_SYNTHESIZE(RockerDelegate*, m_rockerDelegate, RockerDelegate);

};

#endif /* Rocker_hpp */
//
//  Rocker.cpp
//  Rocker
//
//  Created by Forest on 16/7/11.
//
//

#include "Rocker.hpp"

#include <algorithm>

Rocker::Rocker():
m_rocker(nullptr),m_rockerBG(nullptr),m_touch(nullptr),m_listener(nullptr)
{
}

Rocker::~Rocker(){

}

Rocker* Rocker::createRocker(const std::string &rockerImage, const std::string &rockerBGImage){
    Rocker* rocker = new Rocker();
    if (rocker && rocker->initRocker(rockerImage,rockerBGImage)) {
        rocker->autorelease();
        return rocker;
    }
    CC_SAFE_DELETE(rocker);
    return nullptr;
}

bool Rocker::initRocker(const std::string &rockerImage, const std::
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值