按钮控件按下时实现一直执行某个函数

我想实现当按钮按下未放时一直执行某个函数,所以重写了一个类继承按钮重写了Touch的函数和update函数,定义了一个函数指针,直接贴代码吧

virtual bool ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent );

/*OptButton.h的代码*/
        virtual void registerWithTouchDispatcher( void );
    virtual void update( float dt);
    void setOptFunc(HelloWorld* callbk,void (HelloWorld::*Opt)());
    void initView(CCLabelTTF* lab,CCScale9Sprite* s9);
    void setName(const char * name);
private:
    bool isTouching;
    void (HelloWorld::*Option)();
    HelloWorld* callback;
/*OptButton.cpp的代码*/
bool OptButton::ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent ) {
    isTouching = true;
    CCLOG("chupingl");
    return true;
}
void OptButton::ccTouchEnded( CCTouch *pTouch, CCEvent *pEvent ) {
    isTouching = false;
}

void OptButton::registerWithTouchDispatcher( void ) {
    CCLayer::registerWithTouchDispatcher();
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
}
void OptButton::setOptFunc(HelloWorld* callbk,void (HelloWorld::*Opt)())
{
    this->callback = callbk;
    this->Option = Opt;
}
void OptButton::update(float dt)
{
    //CCLOG("Button update");
    if(isTouching)
    {
        (callback->*Option)();
        CCLOG(name);
    }
}

/*HelloWorld.cpp代码*/
    LButton->setOptFunc(this,&HelloWorld::moveLeft);    
    BButton->setOptFunc(this,&HelloWorld::shoot);
    RButton->setOptFunc(this,&HelloWorld::moveRight);
    this->addChild(LButton,2);
    this->addChild(RButton,2);
    this->addChild(BButton,2);
}
void HelloWorld::moveLeft()
{
    player->stepToLeft(3);
    CCLOG("MoveLeft");
}
void HelloWorld::moveRight()
{
    player->stepToRight(3);
    CCLOG("MoveRight");
}
void HelloWorld::shoot()
{
    player->stepToLeft(3);
    CCLOG("Shoot");
}

```
virtual void ccTouchEnded( CCTouch *pTouch, CCEvent *pEvent );
上面总共三个按钮,但是不知道为什么无论按哪个按钮,都执行shoot函数,这是为什么啊?

因为你的按钮没有判断触摸范围所以消息一直被最后添加到HelloWorld的BButton截获所致吗

button里定义一个属性 类似TAG 重载一个初始化方法 增加一个参数 Tag值 = 参数值

2楼是对的,按钮的重写有问题,可以看看原来的源代码的按钮是怎么写的,你覆盖了ccTouchBegan方法,原来父类的ccTouchBegan方法也要实现的,可以在继承的ccTouchBegan里面加上一句
CCControlButton::ccTouchBegan()试试;