我正在尝试创建一个滚动方法来移动我的背景精灵。但是当我在方法中引用背景精灵时,我收到了这条消息:
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();
答案 0 :(得分:1)
cocos2d::Sprite
是指针*
。所以它会是bg2->getPosition()
另外,你正在做cocos2d::Sprite* bg2;
但使用:bg1 = Sprite::create("005_chao_base.png");
另外,养成名字间隔一切的习惯。你是不一致的。有时您使用cocos2d::Sprite*
其他不使用cocos2d::
编辑:此外,您应该在.cpp
中将命名空间命名为HelloWorld::Scroll
答案 1 :(得分:1)
void scroll()
是您班级的成员函数。.cpp
另一个void scroll()
声明,并且您希望在其中引用bg2
的成员变量class HelloWorld
,在这种情况下您会收到错误“未声明的标识符“。原因是非成员函数void scroll()
不了解HelloWorld
类定义。所以您的问题是您缺少scroll
函数中的类标识符。 void scroll()
类标识符中定义的.cpp
函数前面(例如HelloWorld::scroll()
),请参阅下面的代码:void HelloWorld::scroll()
{
Point pos2 = bg2->getPosition();
...
}
.h
转发声明void scroll();
。->
从getPosition()
拨打bg2
。 bg2
是指针。答案 2 :(得分:0)
如果编译器说你使用了未定义的符号,那么符号没有用错误的类型定义;它没有定义。
检查您的.cpp模块源中是否包含helloWorld.h
。