我正在尝试创建一个滚动方法来移动背景精灵。但是,当我在方法中引用背景精灵时,会收到以下消息:

Use of undeclared identifier 'bg2'


这就是我试图在滚动方法中使用bg2的方式:

   void scroll() {

    Point pos2 = bg2.getPosition();

    pos1.x -= 5.0f;
    pos2.x -= 5.0f;

    if(pos1.x <=-(visibleSize.width*0.5f) )
    {
        pos1.x = pos2.x + winSize.width;
    }

    if(pos2.x <=-(winSize.width*0.5f) )
    {
        pos2.x = pos1.x + winSize.width;
    }

    background1.setPosition(pos1);
    background2.setPosition(pos2);


}


但是我在helloWorld.h中声明了bg2,如下所示:

class HelloWorld : public cocos2d::Layer
{
public:
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();

// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();

// a selector callback
void menuCloseCallback(cocos2d::Ref* pSender);

// implement the "static create()" method manually
CREATE_FUNC(HelloWorld);

//windows size
cocos2d::Size visibleSize;
cocos2d::Point origin;

//state machines
char gameState;
char playerState;

//sprites
cocos2d::Sprite* player;
cocos2d::Sprite* bg1;
cocos2d::Sprite* bg2;
cocos2d::Sprite* bg3;
cocos2d::Sprite* bg4;
cocos2d::Sprite* bg5;
cocos2d::Sprite* bg6;
cocos2d::Sprite* bg7;
cocos2d::Sprite* bg8;
cocos2d::Sprite* bg9;
cocos2d::Sprite* bg10;
cocos2d::Sprite* bg11;

bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event * event);
void onTouchMoved(cocos2d::Touch *touch, cocos2d::Event * event);
void onTouchEnded(cocos2d::Touch *touch, cocos2d::Event * event);
void scroll();


};

我还在helloWorld.cpp的init方法中定义了bg2

 //define background
bg1 = Sprite::create("005_chao_base.png");
bg1->setAnchorPoint(Point(0,0));
bg1->setPosition(Point(0, 0));
this->addChild(bg1,-1);

bg2 = Sprite::create("005_chao_base.png");
bg2->setAnchorPoint(Point(0,0));
bg1->setPosition(Point(bg1->getBoundingBox().size.width, 0));
this->addChild(bg2,-1);


我在.cpp中声明了这种滚动方法

void scroll() {

}


和.h

void scroll();

最佳答案

cocos2d::Sprite是指示*的指针。所以它是bg2->getPosition()

另外,您正在做cocos2d::Sprite* bg2;
但使用:bg1 = Sprite::create("005_chao_base.png");

同样,养成用名字隔开一切的习惯。你前后矛盾。有时您使用cocos2d::Sprite*其他人不使用cocos2d::

编辑:此外,您还应在.cpp中像HelloWorld::Scroll一样命名空间滚动

10-07 13:46