C++ 计划选择器错误

C++ 计划选择器错误,c++,windows-8,cocos2d-x,C++,Windows 8,Cocos2d X,我正在尝试将我的iPhone应用程序移植到windows 8,这行代码有问题(它是objective-c): < C++上的等价物应该是: this->schedule(schedule_selector(AirScene::fire)); 其中AirScene是我的类的名称,但Visual Studio 2012返回此错误: error C2064: term does not evaluate to a function taking 1 arguments 因此,换句话说,找不到

我正在尝试将我的iPhone应用程序移植到windows 8,这行代码有问题(它是objective-c):

< C++上的等价物应该是:

this->schedule(schedule_selector(AirScene::fire));
其中AirScene是我的类的名称,但Visual Studio 2012返回此错误:

error C2064: term does not evaluate to a function taking 1 arguments
因此,换句话说,找不到函数计划(选择器)。这很奇怪,因为我对非计划方法没有问题,你知道吗

编辑:AirScene.h

#include "cocos2d.h" 
#include "Box2D\Box2D.h"
#include "AirSceneDelegate.h"

class AirScene : public cocos2d::CCLayer {
    public:
        AirScene::~AirScene(void);

        // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
        virtual bool init();  
        static cocos2d::CCScene* scene();
        LAYER_NODE_FUNC(AirScene);

        //Methods
        void selectSpriteForTouch(cocos2d::CCPoint touchLocation);
        cocos2d::CCPoint checkPuckPosition(cocos2d::CCPoint newPosition);
        void panForTranslation(cocos2d::CCPoint translation);
        void updateQuestion(string question);
        void restoreScene();
        void enableScreensaver();
        void disableScreensaver(cocos2d::CCPoint touchPosition);

        //Setters
        void setDelegate(AirSceneDelegate *delegate);

    private:
        // Init
        void initBackground(cocos2d::CCSize winSize);
        void initPuck(cocos2d::CCSize winSize, cocos2d::CCPoint position);
        void initHoles(cocos2d::CCSize winSize);
        void initQuestion(cocos2d::CCSize winSize);

        // Methods
        void fire(cocos2d::ccTime dt = 0);
        void updateHoles(cocos2d::ccTime dt);
        void validateVote(bool isPositiveVote);
        float getVelocity();        

        // Attributes

        ...

        //Delegate
        AirSceneDelegate* _delegate;
};
AirScene.cpp

#include <iostream>
#include "AirScene.h"

USING_NS_CC;

#pragma region Delete

AirScene::~AirScene(void)
{
    ///TODO : DELETE ALL
    delete(_delegate);
    _delegate = 0;
}

#pragma endregion Delete

#pragma region Init

CCScene* AirScene::scene()
{
    // 'scene' is an autorelease object
    CCScene *scene = CCScene::node();

    // 'layer' is an autorelease object
    AirScene *layer = AirScene::node();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

// on "init" you need to initialize your instance
bool AirScene::init()
{
    // Super Init
    if (!CCLayer::init())
        return false;

    //Init Attributes
    screenSaverMode = false;
    hasVoted = false;
    schedule = false;
    _delegate = 0;
    _selSprite = NULL;

    //Create World
    b2Vec2 gravity = b2Vec2(0, 0);
    _world = new b2World(gravity);

    CCSize size = CCDirector::sharedDirector()->getWinSize();

    //Inits
    AirScene::initBackground(size);
    AirScene::initPuck(size, ccp(512, 200));
    AirScene::initHoles(size);
    AirScene::initQuestion(size);


    return true;
}

// Init Background and set walls
void AirScene::initBackground(CCSize winSize)
{
    ...
}


/** Init Puck : create puck body and shape */
void AirScene::initPuck(CCSize winSize, CCPoint position)
{
    ...
}


void AirScene::initHoles(CCSize winSize)
{
    ...
}


// Set Question Label
void AirScene::initQuestion(CCSize winSize)
{    
    ...
}

#pragma endregion Init

#pragma region Private

void AirScene::fire(ccTime dt)
{
    _world->Step(dt, 8, 8);

    //CCSprite *ballData = ((CCSprite *)_body->GetUserData()) 
    ((CCSprite *)_body->GetUserData())->setPosition(ccp(_body->GetPosition().x * PTM_RATIO, _body->GetPosition().y * PTM_RATIO));
    _puckShadow->setPosition(ccp(((CCSprite *)_body->GetUserData())->getPosition().x + 2, ((CCSprite *)_body->GetUserData())->getPosition().y - 2));

    if (screenSaverMode)
        AirScene::updateHoles(0);
}

//Ajust Glow Effect and Validate Vote
void AirScene::updateHoles(cocos2d::ccTime dt)
{
    ...
}

float AirScene::getVelocity()
{
    ...
}

void AirScene::validateVote(bool isPositiveVote)
{
    ...
}

#pragma endregion Private

#pragma region Public

void AirScene::selectSpriteForTouch(CCPoint touchLocation)
{
    ...
}

// Check if the puck is not outside the view
CCPoint AirScene::checkPuckPosition(CCPoint newPosition)
{
    ...
}

// Move Puck
void AirScene::panForTranslation(CCPoint translation)
{
    ...
}

// Update Question
void AirScene::updateQuestion(string question)
{
    ...
}

void AirScene::restoreScene()
{
    ...
}

void AirScene::enableScreensaver()
{
    screenSaverMode = true;
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    //Unschedule actions
    this->unscheduleAllSelectors();

    //Delete Puck
    CCPoint puckPosition = _puck->getPosition();
    _puck->removeAllChildrenWithCleanup(true);
    _puck->removeFromParentAndCleanup(true);
    _puckShadow->removeAllChildrenWithCleanup(true);
    _puckShadow->removeFromParentAndCleanup(true);
    _world->DestroyBody(_body);
    delete(_puck);
    delete(_puckShadow);

    //RecreatePuck
    this->initPuck(winSize, ccp(512, 200));

    //Impulse
    _body->SetLinearVelocity(b2Vec2(0, 0));

    /** ERROR IS CAUSED BY THIS LINE */ 
    this->schedule(schedule_selector(AirScene::fire));
}

void AirScene::disableScreensaver(cocos2d::CCPoint touchPosition)
{
}

#pragma endregion Public


#pragma region Getters & Setters

void  AirScene::setDelegate(AirSceneDelegate *delegate)
{
    _delegate = delegate; 
}

#pragma endregion Getters & Setters
#包括
#包括“AirScene.h”
使用\u NS\u CC;
#杂注区域删除
空气层::~空气层(无效)
{
///TODO:删除所有
删除(_代表);
_委托=0;
}
#pragma结束区域删除
#布拉格区域初始化
CCScene*AirScene::scene()
{
//“场景”是一个自动释放对象
CCScene*scene=ccscscene::node();
//“层”是一个自动释放对象
AirScene*层=AirScene::节点();
//将层作为子层添加到场景中
场景->添加子对象(层);
//返回现场
返回场景;
}
//在“init”中,您需要初始化实例
bool AirScene::init()
{
//超级初始化
如果(!CCLayer::init())
返回false;
//初始化属性
screenSaverMode=false;
hasvated=false;
附表=假;
_委托=0;
_selSprite=NULL;
//创造世界
b2Vec2重力=b2Vec2(0,0);
_世界=新世界(重力);
CCSize size=CCDirector::sharedDirector()->getWinSize();
//初始化
大气背景(大小);
空气层::initPuck(大小,ccp(512200));
AirScene::初始孔(尺寸);
AirScene::初始问题(尺寸);
返回true;
}
//初始化背景和设置墙
void AirScene::initBackground(CCSize-winSize)
{
...
}
/**初始冰球:创建冰球身体和形状*/
void AirScene::initPuck(CCSize winSize,CCPoint位置)
{
...
}
void AirScene::initHoles(CCSize winSize)
{
...
}
//设置问题标签
void AirScene::initQuestion(CCSize-winSize)
{    
...
}
#pragma endregion Init
#布拉格马私人区
真空空气场景::火灾(CCDT时间)
{
_世界->步骤(dt,8,8);
//CCSprite*ballData=((CCSprite*)\u body->GetUserData())
((CCSprite*)\u body->GetUserData())->setPosition(ccp(\u body->GetPosition().x*PTM\u比率,\u body->GetPosition().y*PTM\u比率));
_puckShadow->setPosition(ccp(((CCSprite*)正文->GetUserData())->getPosition().x+2,((CCSprite*)正文->GetUserData())->getPosition().y-2));
如果(屏幕保护模式)
AirScene::updateHoles(0);
}
//Ajust辉光效果和验证投票
void AirScene::updateHoles(cocos2d::ccTime dt)
{
...
}
浮动AirScene::getVelocity()
{
...
}
void AirScene::validateVote(bool isPositiveVote)
{
...
}
#布拉格终端区专用
#布拉格马公共区
void AirScene::选择spritefortouch(CCPoint touch位置)
{
...
}
//检查冰球是否在视野之外
CCPoint AirScene::checkPuckPosition(CCPoint newPosition)
{
...
}
//移动冰球
void AirScene::panForTranslation(CCPoint translation)
{
...
}
//更新问题
void AirScene::updateQuestion(字符串问题)
{
...
}
void AirScene::restoreScene()
{
...
}
void AirScene::enableScreensaver()
{
screenSaverMode=true;
CCSize winSize=CCDirector::sharedDirector()->getWinSize();
//计划外行动
此->计划外选择器();
//删除冰球
CCPoint puckPosition=_puck->getPosition();
_puck->removeAllChildrenWithCleanup(true);
_puck->removeFromParentAndCleanup(true);
_puckShadow->removeAllChildrenWithCleanup(true);
_puckShadow->removeFromParentAndCleanup(true);
_世界->毁灭体(_body);
删除(_puck);
删除(_puckShadow);
//重现冰球
这->initPuck(winSize,ccp(512200));
//冲动
_body->SetLinearVelocity(b2Vec2(0,0));
/**错误是由此行引起的*/
此->计划(计划_选择器(AirScene::fire));
}
void AirScene::禁用屏幕保护程序(cocos2d::CCPoint touchPosition)
{
}
#布拉格公共区域
#pragma区域getter和setter
void AirScene::setDelegate(AirSceneDelegate*委托)
{
_代表=代表;
}
#pragma endregion getter和setter

已修复。

用于windows 8模板的cocos 2d版本是旧版本,因此安排选择器的好方法是:

CCScheduler::sharedScheduler()->scheduleSelector(schedule_selector(AirScene::fire), this, 0, false);

fire方法是否接受1个参数?是否可以发布更多的类文件?取出无法显示但显示方法的部分谢谢你们的评论,@LearnCos2D,是的,Fire可以接受一个可选参数。@Shawn Kendrot,我已经编辑了我的问题,谢谢。
CCScheduler::sharedScheduler()->scheduleSelector(schedule_selector(AirScene::fire), this, 0, false);