我想实现当按钮按下未放时一直执行某个函数,所以重写了一个类继承按钮重写了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函数,这是为什么啊?