Reza Ghobadinic

Layer

The Layer is a subclass of Node that implements the TouchEventDelegate protocol. If you need to access to inputs from Keyboard, Touch, Mouse or the Accelerometer, you should use a Layer class.

Layers work a bit like Photoshop layers! In your game, you can have a Scene that has one or more Layers as its children for different purposes. One actual game Layer with the game characters in it, a Layer for the scores, one Layer for an in-game menu and another one for the information dialog for example.

Layers can also be modal or non-modal. If you don’t let the touch events pass to the background layers, you will make your layer to be a modal layer. We will see all about the inputs and events in the next section about handling inputs.

Layer Creation

Almost exactly the same way that we created a Scene class, we can create the Layer class! Although, there are two ways to create your layer and scene relationship.

MyLayer.h

class MyLayer : public Layer
{
public:
    static Layer* createLayer();
    virtual bool init();
    CREATE_FUNC(MyLayer);
};

MyScene.h

class MyScene : public Scene
{
public:
    static Scene* createScene();
    virtual bool init();
    CREATE_FUNC(MyScene);
};

MyLayer.cpp

#include "MyLayer.h"

Layer* MyLayer::createLayer()
{
    auto layer = MyLayer::create();
    return layer;
}

bool MyLayer::init()
{
    auto sprite = Sprite::create("Box.png");
    sprite->setPosition(240, 160);
    this->addChild(sprite);
    return true;
}

MyScene.cpp

#include "MyScene.h"
#include "MyLayer.h"

Scene* MyScene::createScene()
{
    auto scene = MyScene::create();
    return scene;
}

bool MyScene::init()
{
    auto layer = MyLayer::createLayer();
    this->addChild(layer);
    return true;
}

CombinedScene.h

class CombinedScene : public Layer
{
public:
    static Scene* createScene();
    virtual bool init();
    CREATE_FUNC(CombinedScene);
};

CombinedScene.cpp

#include "KeyboardScene.hpp"

Scene* CombinedScene::createScene()
{
    auto scene = Scene::create();
    auto layer = CombinedScene::create();
    scene->addChild(layer);
    return scene;
}

bool CombinedScene::init()
{
    auto sprite = Sprite::create("Box.png");
    sprite->setPosition(240, 160);
    this->addChild(sprite);
    return true;
}

The result is just a simple square.

This was a quick introduction to Layer and how to create and use it, which as you saw is very similar to the Scene class.

Download Source

Exit mobile version