Learn COCOS2DX with Real Code Examples
Updated Nov 24, 2025
Code Sample Descriptions
1
Cocos2d-x Simple Counter Game
#include "CounterScene.h"
#include "ui/CocosGUI.h"
USING_NS_CC;
Scene* CounterScene::createScene() {
auto scene = Scene::create();
auto layer = CounterScene::create();
scene->addChild(layer);
return scene;
}
bool CounterScene::init() {
if (!Layer::init()) return false;
count = 0;
label = Label::createWithTTF("Count: 0", "fonts/Marker Felt.ttf", 24);
label->setPosition(Vec2(200, 200));
this->addChild(label);
auto incButton = ui::Button::create();
incButton->setTitleText("+");
incButton->setPosition(Vec2(150, 100));
incButton->addClickEventListener([&](Ref*) { updateCount(1); });
this->addChild(incButton);
auto decButton = ui::Button::create();
decButton->setTitleText("-");
decButton->setPosition(Vec2(250, 100));
decButton->addClickEventListener([&](Ref*) { updateCount(-1); });
this->addChild(decButton);
return true;
}
void CounterScene::updateCount(int delta) {
count += delta;
label->setString("Count: " + std::to_string(count));
}
A basic Cocos2d-x example that creates a counter label and buttons to increment or decrement the value.
2
Cocos2d-x Basic Hello World Scene
#include "HelloScene.h"
#include "cocos2d.h"
USING_NS_CC;
Scene* HelloScene::createScene() {
auto scene = Scene::create();
auto layer = HelloScene::create();
scene->addChild(layer);
return scene;
}
bool HelloScene::init() {
if (!Layer::init()) return false;
auto label = Label::createWithSystemFont("Hello, Cocos2d-x!", "Arial", 28);
label->setPosition(Director::getInstance()->getVisibleSize() / 2);
this->addChild(label);
return true;
}
A classic Hello World label centered on the screen.
3
Cocos2d-x Touch Move Sprite
#include "TouchMoveScene.h"
#include "cocos2d.h"
USING_NS_CC;
Scene* TouchMoveScene::createScene() {
auto scene = TouchMoveScene::create();
return scene;
}
bool TouchMoveScene::init() {
if (!Scene::init()) return false;
sprite = Sprite::create("player.png");
sprite->setPosition(Vec2(200, 150));
addChild(sprite);
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [&](Touch* t, Event*) {
sprite->setPosition(t->getLocation());
return true;
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
return true;
}
Moves a sprite to where the user touches the screen.
4
Cocos2d-x Sprite Movement with Actions
#include "MoveActionScene.h"
#include "cocos2d.h"
USING_NS_CC;
bool MoveActionScene::init() {
if (!Scene::init()) return false;
auto sprite = Sprite::create("ship.png");
sprite->setPosition(Vec2(100, 150));
addChild(sprite);
auto move = MoveBy::create(2.0f, Vec2(200, 0));
sprite->runAction(move);
return true;
}
Moves a sprite to the right using MoveBy action.
5
Cocos2d-x Keyboard Input Movement
#include "KeyboardScene.h"
#include "cocos2d.h"
USING_NS_CC;
bool KeyboardScene::init() {
if (!Scene::init()) return false;
sprite = Sprite::create("hero.png");
sprite->setPosition(Vec2(200, 200));
addChild(sprite);
auto listener = EventListenerKeyboard::create();
listener->onKeyPressed = [&](EventKeyboard::KeyCode key, Event*) {
if (key == EventKeyboard::KeyCode::KEY_RIGHT_ARROW) sprite->setPositionX(sprite->getPositionX() + 10);
if (key == EventKeyboard::KeyCode::KEY_LEFT_ARROW) sprite->setPositionX(sprite->getPositionX() - 10);
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
return true;
}
Moves a sprite with arrow keys.
6
Cocos2d-x UI Button Example
#include "UIButtonScene.h"
#include "ui/CocosGUI.h"
USING_NS_CC;
bool UIButtonScene::init() {
if (!Scene::init()) return false;
auto button = ui::Button::create();
button->setTitleText("Click Me");
button->setPosition(Vec2(200, 200));
button->addClickEventListener([](Ref*) {
CCLOG("Button clicked");
});
addChild(button);
return true;
}
Adds a UI button that logs a message when clicked.
7
Cocos2d-x Particle Effect Example
#include "ParticleScene.h"
#include "cocos2d.h"
USING_NS_CC;
bool ParticleScene::init() {
if (!Scene::init()) return false;
auto particle = ParticleFireworks::create();
particle->setPosition(Vec2(200, 200));
addChild(particle);
return true;
}
Displays a built-in particle system.
8
Cocos2d-x Background Music
#include "AudioScene.h"
#include "audio/include/AudioEngine.h"
USING_NS_CC;
using namespace experimental;
bool AudioScene::init() {
if (!Scene::init()) return false;
AudioEngine::play2d("music.mp3", true);
return true;
}
Plays looping background music.
9
Cocos2d-x Sprite Animation Example
#include "AnimScene.h"
#include "cocos2d.h"
USING_NS_CC;
bool AnimScene::init() {
if (!Scene::init()) return false;
Vector<SpriteFrame*> frames;
frames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("walk1.png"));
frames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("walk2.png"));
auto sprite = Sprite::createWithSpriteFrame(frames.at(0));
sprite->setPosition(Vec2(200, 200));
addChild(sprite);
auto anim = Animation::createWithSpriteFrames(frames, 0.15f);
sprite->runAction(RepeatForever::create(Animate::create(anim)));
return true;
}
Creates a walking animation using sprite frames.
10
Cocos2d-x Scene Transition Fade
#include "StartScene.h"
#include "NextScene.h"
#include "ui/CocosGUI.h"
USING_NS_CC;
bool StartScene::init() {
if (!Scene::init()) return false;
auto button = ui::Button::create();
button->setTitleText("Next Scene");
button->setPosition(Vec2(200, 200));
button->addClickEventListener([](Ref*) {
Director::getInstance()->replaceScene(TransitionFade::create(1.0f, NextScene::createScene()));
});
addChild(button);
return true;
}
Transitions to another scene using fade effect.