在编写子弹层的时候,添加了Vector <Sprite*> vecBullet 成员变量,但是编译就报错,提示在 < 前面缺少 ;
而且还有一个SpriteBatchNode* bulletBatchNode 的成员变量,但是在后面的成员函数里使用,却提示未定义的标示符,咋回事呢? 代码如下:
// BulletLayer.h
#ifndef __BULLET_LAYER_H__
#define __BULLET_LAYER_H__
#include "cocos2d.h"
class BulletLayer : public cocos2d::Layer
{
public:
BulletLayer();
~BulletLayer();
virtual bool init();
CREATE_FUNC(BulletLayer);
//子弹渲染,发射子弹的动作,schedule会定期调用
void shootBullet(float dt);
//移除子弹
void removeBullet(Node* pNode);
//停止发射
//void stopShootBullut();
public:
Vector vecBullet;
SpriteBatchNode * bulletBatchNode;
};
#endif
```
// BulletLayer.cpp
#include "BulletLayer.h"
#include "PlaneLayer.h"
USING_NS_CC;
BulletLayer::BulletLayer()
{
}
BulletLayer::~BulletLayer()
{
}
//init()里初始化子弹,包括位置定位
bool BulletLayer::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(!Layer::init());
auto bulletTexture = TextureCache::getInstance()->addImage("bullet.png");
bulletBatchNode = SpriteBatchNode::createWithTexture(bulletTexture);
this->addChild(bulletBatchNode);
this->schedule(schedule_selector(BulletLayer::shootBullet),0.2f);
bRet = true;
} while (0);
return bRet;
}
//发射子弹的动作,schedule会定期调用
void BulletLayer::shootBullet(float dt)
{
auto planePosition = PlaneLayer::sharedPlane->getChildByTag(AIRPLANE)->getPosition();
auto planeSize = PlaneLayer::sharedPlane->getChildByTag(AIRPLANE)->getContentSize();
auto winSize = Director::getInstance()->getVisibleSize();
auto bullet = Sprite::createWithSpriteFrameName("bullet_1.png");
bullet->setScale(0.3f);
bullet->setPosition(Vec2(planePosition.x,planePosition.y + planeSize.height));
bulletBatchNode->addChild(bullet);
vecBullet.pushBack(bullet);
//飞行距离
float flyLen = winSize.height - planePosition.y + planeSize.height;
//飞行速度
float flySpeed = 320/1 ;
//实际飞行时间
float flyTime = flyLen / flySpeed ;
auto planeMoveTo = MoveTo::create(flyTime,Vec2(planePosition.x,winSize.height + planeSize.height/2));
auto planeMoveDone = CallFuncN::create(CC_CALLBACK_1(BulletLayer::removeBullet,this));
auto planeSequence = Sequence::create(planeMoveTo,planeMoveDone,NULL);
bullet->runAction(planeSequence);
}
//移除子弹
void BulletLayer::removeBullet(Node* pNode)
{
if ( NULL == pNode)
{
return ;
}
auto bullet = (Sprite*) pNode;
this->removeChild(bullet,true);
vecBullet.eraseObject(bullet);
}
```
错误提示:
错误 1 error C2143: 语法错误 : 缺少“;”(在“<”的前面) (..\Classes\GameScene.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 27
错误 2 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int (..\Classes\GameScene.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 27
错误 3 error C2238: 意外的标记位于“;”之前 (..\Classes\GameScene.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 27
错误 4 error C2143: 语法错误 : 缺少“;”(在“*”的前面) (..\Classes\GameScene.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 28
错误 5 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int (..\Classes\GameScene.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 28
错误 6 error C2143: 语法错误 : 缺少“;”(在“<”的前面) (..\Classes\AppDelegate.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 27
错误 7 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int (..\Classes\AppDelegate.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 27
错误 8 error C2238: 意外的标记位于“;”之前 (..\Classes\AppDelegate.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 27
错误 9 error C2143: 语法错误 : 缺少“;”(在“*”的前面) (..\Classes\AppDelegate.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 28
错误 10 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int (..\Classes\AppDelegate.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 28
错误 11 error C2143: 语法错误 : 缺少“;”(在“<”的前面) (..\Classes\BulletLayer.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 27
错误 12 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int (..\Classes\BulletLayer.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 27
错误 13 error C2238: 意外的标记位于“;”之前 (..\Classes\BulletLayer.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 27
错误 14 error C2143: 语法错误 : 缺少“;”(在“*”的前面) (..\Classes\BulletLayer.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 28
错误 15 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int (..\Classes\BulletLayer.cpp) d:\gameproject\gameproject\plane\classes\bulletlayer.h 28
错误 16 error C2065: “bulletBatchNode”: 未声明的标识符 d:\gameproject\gameproject\plane\classes\bulletlayer.cpp 25
错误 17 error C2065: “bulletBatchNode”: 未声明的标识符 d:\gameproject\gameproject\plane\classes\bulletlayer.cpp 26
错误 18 error C2039: “bulletBatchNode”: 不是“BulletLayer”的成员 d:\gameproject\gameproject\plane\classes\bulletlayer.cpp 47
错误 19 error C2065: “bulletBatchNode”: 未声明的标识符 d:\gameproject\gameproject\plane\classes\bulletlayer.cpp 47
错误 20 error C2227: “->addChild”的左边必须指向类/结构/联合/泛型类型 d:\gameproject\gameproject\plane\classes\bulletlayer.cpp 47
错误 21 error C2039: “vecBullet”: 不是“BulletLayer”的成员 d:\gameproject\gameproject\plane\classes\bulletlayer.cpp 49
错误 22 error C2065: “vecBullet”: 未声明的标识符 d:\gameproject\gameproject\plane\classes\bulletlayer.cpp 49
错误 23 error C2228: “.pushBack”的左边必须有类/结构/联合 d:\gameproject\gameproject\plane\classes\bulletlayer.cpp 49
错误 24 error C2065: “vecBullet”: 未声明的标识符 d:\gameproject\gameproject\plane\classes\bulletlayer.cpp 76
错误 25 error C2228: “.eraseObject”的左边必须有类/结构/联合 d:\gameproject\gameproject\plane\classes\bulletlayer.cpp 76