Cannot initialize return object of type 'int' with an lvalue of type 'cocos2d::Scene *'
今Cocos2dxを用いて本のサンプルゲームを作成しているのですが、タイトルのエラーがでてしまい。なぜこのようなエラーが出てしまっているのかわからない状況です。
以下のコードのcreateSceneWithLevelの最後のリターン文でエラーが出ます。またメソッドの最初でも
Function cannot return function type 'cocos2d::Scene *()'
というエラーが出てしまいます。
修正方法をご教授ください。
ヘッダーとソースコードをいかに示します。
#include "MainScene.h"
USING_NS_CC;
const Vec2 GRAVITY_ACCELERATION = Vec2(0, -3);
const Vec2 IMPULSE_ACCELERATION = Vec2(0, 180);
Scene* MainScene::createSceneWithLevel(int level)()
{
// 'scene' is an autorelease object
auto scene = Scene::createWithPhysics();
auto world = scene->getPhysicsWorld();
//重力を設定する
world->setGravity(GRAVITY_ACCELERATION);
#if COCOS2D_DEBUG > 0
world->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
#endif
world->setSpeed(6.0);
auto layer = new MainScene();
if(layer && layer->initWithLevel(level)){
layer->autorelease();
}else{
CC_SAFE_DELETE(layer);
}
scene->addChild(layer);
//return scene
return scene;
}
bool MainScene::initWithLevel(int level)
{
if(!Layer::init())
return false;
//ステージを生成
auto stage = Stage::createWithLevel(level);
this->addChild(stage);
this->setStage(stage);
//タッチした時のリスナを初期化
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [this](Touch *touch, Event *event){
this->setIsPress(true);
return true;
};
listener->onTouchEnded = [this](Touch *touch, Event *event){
this->setIsPress(false);
};
listener->onTouchCancelled = [this](Touch *touch, Event *event){
this->setIsPress(false);
};
//Register event listener
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
//ぶつかったリスナを定義
auto contactListener = EventListenerPhysicsContact::create();
contactListener->onContactBegin = [](PhysicsContact& contact){
log("hit");
return true;
};
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(contactListener, this);
this->scheduleUpdate();
return this;
}
MainScene::MainScene()
: _stage(nullptr)
,_isPress(false)
{
}
MainScene::~MainScene()
{
CC_SAFE_RELEASE_NULL(_stage);
}
void MainScene::update(float dt)
{
if(this->getIsPress()){
//プレスされた場合プレイヤの推進力をつける
_stage->getPlayer()->getPhysicsBody()->applyImpulse(IMPULSE_ACCELERATION);
}
}
#ifndef __SampleGame_SCENE_H__
#define __SampleGame_SCENE_H__
#include "cocos2d.h"
#include "Stage.h"
class MainScene : public cocos2d::Layer
{
protected:
MainScene();
virtual ~MainScene();
bool init() override;
bool initWithLevel(int level);
public:
static cocos2d::Scene* createSceneWithLevel(int level);
void update(float dt);
CC_SYNTHESIZE(bool, _isPress, IsPress);
CC_SYNTHESIZE_RETAIN(Stage *, _stage, Stage);
};
#endif // __SampleGame_SCENE_H__