[cocos2d-x]HelloWorldDemo

实现一个demo,具备以下功能:

1.让几个字分别位于中间和四个角落。

2.中间的字体改变,并且带有闪烁功能。

3.单点触摸和多点触摸,并且能够实现滑动效果,滑动的话必须使用带有bool返回值的单点触摸设置为true。

4.下面两个按钮能够实现添加节点和移除节点的作用。

效果图:

[cocos2d-x]HelloWorldDemo_第1张图片

实现代码:

HelloWorldScene.h:

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
using namespace cocos2d;
class HelloWorld : public cocos2d::CCLayer
{
public:
    // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
    virtual bool init();

    // there's no 'id' in cpp, so we recommend to return the class instance pointer
    static cocos2d::CCScene* scene();
    
    // a selector callback
    void menuCloseCallback(CCObject* pSender);

    // preprocessor macro for "static create()" constructor ( node() deprecated )
    CREATE_FUNC(HelloWorld);

    void menuRemoveCallback(CCObject* pSender);

    //启动触屏事件
    virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);

    //触摸注册事件
    virtual void registerWithTouchDispatcher();

    //单点触摸事件
    virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent);

    //移动事件
    virtual void ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent);
};

#endif // __HELLOWORLD_SCENE_H__

HelloWorldScene.cpp:

#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"

using namespace cocos2d;
using namespace CocosDenshion;

CCScene* HelloWorld::scene()
{
    // 'scene' is an autorelease object
    CCScene *scene = CCScene::create();
    
    // 'layer' is an autorelease object
    HelloWorld *layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}


bool HelloWorld::init()
{

    if ( !CCLayer::init() )
    {
        return false;
    }
    //设置当前允许触摸
    this->setTouchEnabled(true);
    
    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
                                        "CloseNormal.png",
                                        "CloseSelected.png",
                                        this,
    menu_selector(HelloWorld::menuCloseCallback) );
    pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width / 2- 30, 20) );

    CCMenuItemImage *pCloseItem1 = CCMenuItemImage::create(
                                                          "CloseNormal.png",
                                                          "CloseSelected.png",
                                                          this,
                                                          menu_selector(HelloWorld::menuRemoveCallback) );
    pCloseItem1->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width / 2  + 30, 20) );
    
    
    CCMenu* pMenu = CCMenu::create(pCloseItem1,pCloseItem, NULL);
    pMenu->setPosition( CCPointZero );
    this->addChild(pMenu, 1);

   
    CCLabelTTF* pLabel = CCLabelTTF::create("江苏理工", "Thonburi", 34);
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    //一开始设置为绿色
    pLabel->setColor(ccGREEN);
    pLabel->setPosition( ccp(size.width / 2, size.height / 2) );
    this->addChild(pLabel,1);
    
    //让节点闪烁的方法
    CCAction *action = CCBlink::create(5, 20);
    pLabel->runAction(action);
    //变色的方法
    CCAction *action1 = CCTintTo::create(5, 255, 0, 0);
    pLabel->runAction(action1);
    
    //左上角显示姓名
    CCLabelTTF* pLabel1 = CCLabelTTF::create("丁小未", "Thonburi", 34);
    CCSize size1 = CCDirector::sharedDirector()->getWinSize();
    pLabel1->setAnchorPoint(ccp(0, 1));
    pLabel1->setPosition( ccp(0, size1.height) );
    this->addChild(pLabel1,1);
    
    //右上角显示性别
    CCLabelTTF* pLabel2 = CCLabelTTF::create("男", "Thonburi", 34);
    CCSize size2 = CCDirector::sharedDirector()->getWinSize();
    pLabel2->setAnchorPoint(ccp(1, 1));
    pLabel2->setPosition( ccp(size2.width, size2.height) );
    this->addChild(pLabel2,1);
    
    //右下角显示年龄
    CCLabelTTF* pLabel3 = CCLabelTTF::create("23", "Thonburi", 34);
    CCSize size3 = CCDirector::sharedDirector()->getWinSize();
    pLabel3->setAnchorPoint(ccp(1, 0));
    pLabel3->setPosition( ccp(size3.width, 0) );
    this->addChild(pLabel3,1);
    return true;
    
}

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
    //结束关闭事件
//    CCDirector::sharedDirector()->end();
//
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
//    exit(0);
//#endif
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    
    CCLabelTTF *pLabel = CCLabelTTF::create("我是添加的", "Thonburi", 24);
    pLabel->setPosition(ccp(size.width/2+30,size.height/2+30));
    pLabel->setTag(10);
    this->addChild(pLabel,1);
}

void HelloWorld::menuRemoveCallback(CCObject *pSender)
{
    CCNode *pLabel = this->getChildByTag(10);
    this->removeChild(pLabel);
}

//多点触摸方法
void HelloWorld::ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
{
    //添加子视图
    //随机数是CCRANDOM_0_1,是产生0-1之间的随机数
//    CCSize size = CCDirector::sharedDirector()->getWinSize();
//    CCLabelTTF *pLabel = CCLabelTTF::create("触屏添加", "Thonburi", 24);
//    pLabel->setPosition(ccp(100, 100));
//    pLabel->setTag(10);
//    this->addChild(pLabel,1);
    CCLog("多点触摸Began");
}

bool HelloWorld::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
    CCLog("单点触摸");
    return true;//如果这个不返回true的话,则move方法没用
}

void HelloWorld::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
    CCLog("单点moved");
}

//触摸注册事件
//如果没有这个,默认的是多点触摸,Targeted是单点,Standed是多点触摸
void HelloWorld::registerWithTouchDispatcher()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
}


 

你可能感兴趣的:(helloworld)