this->scheduleOnce(schedule_selector(SelectGameScene::startGameCallback),this, 0.0f, false);

Recibí un error: se debe llamar a la referencia a la función miembro no estática.

void startGameCallback(float dt); //in h file

void SelectGameScene::startGameCallback(float dt)
{
    Director::getInstance()->replaceScene(TransitionFade::create(TRANSITION_TIME,     GameScene::createScene()));
}

Dónde

#define CC_SCHEDULE_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)
typedef void (Ref::*SEL_SCHEDULE)(float);

Recibí este error en XCode con c ++ 11 estándar y la biblioteca cococ2d-x ver4.0.

Actualización: probé este código

this->scheduleOnce(schedule_selector(&SelectGameScene::startGameCallback),this, 0.0f, false);

Recibí un error Uso del identificador no declarado 'schedule_selector'

Actualización2 Encontré el problema. Creé esta clase a través del método estático createScene.

class SelectGameScene : public cocos2d::Layer
{
 public:
   static cocos2d::Scene* createScene();
 }
0
Voloda2 5 feb. 2020 a las 19:18

2 respuestas

La mejor respuesta

El compilador XCode cree que SelectGameScene :: startGameCallback es un método estático, pero es solo un puntero de función miembro. Entonces decido reescribir esta declaración.

De

this->scheduleOnce(schedule_selector(SelectGameScene::startGameCallback),0.0f);

Para

auto funPointer = static_cast<cocos2d::SEL_SCHEDULE>(&SelectGameScene::startGameCallback);
this->scheduleOnce(funPointer, 0.0f);

Porque

#define CC_SCHEDULE_SELECTOR(_SELECTOR) static_cast<cocos2d::SEL_SCHEDULE>(&_SELECTOR)
0
Voloda2 6 feb. 2020 a las 17:38

La sintaxis SelectGameScene::startGameCallback no es válida. Debe tener el &:

this->scheduleOnce(schedule_selector(&SelectGameScene::startGameCallback),this, 0.0f, false);
//                                   ^---- there
1
Guillaume Racicot 5 feb. 2020 a las 16:20