[cocos2d-x]HelloWorldDemo(Mac&Win7两个版本)

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

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

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

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

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

效果图:

实现代码:

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);
}

搞了一段时间的unity3d,最近又重温一下cocos2dx,由于没有mac机,就只能用windows来配置开发环境,依旧从HelloWorld开始!

配置环境:我用的是VS2012,python2.7.3貌似,安装完毕后设置一下环境变量,添加上C:\Python27,然后cocos2dx2.4.2版本,然后cmd创建新工程。

然后在project文件夹下就能看到新建的工程了!

效果图:

上面红色的字我已经标注的很清楚,新手第一次碰到的时候都会想,我要输入中文,但显示出来确实乱码,这就是编码问题,只要转码就OK了!

代码:

                CCLabelTTF *labelWelcome0=CCLabelTTF::create("Hello","微软雅黑",48);
		CCLabelTTF *labelWelcome1=CCLabelTTF::create("World","宋体",48);
		CCLabelTTF *labelWelcome2=CCLabelTTF::create("Welcome","Consolas",48);
		CCLabelTTF *labelWelcome3=CCLabelTTF::create("DingXiaowei","Bitstream Vera Sans Mono",48);

		CCSize size = CCDirector::sharedDirector()->getWinSize();
		float width = size.width;
		float height = size.height;

		CCSize s0 = labelWelcome0->getContentSize();
		CCSize s1 = labelWelcome1->getContentSize();
		CCSize s2 = labelWelcome2->getContentSize();
		CCSize s3 = labelWelcome3->getContentSize();

		labelWelcome0->setPosition(CCPointMake(s0.width/2,size.height-s0.height/2));
		labelWelcome1->setPosition(ccp(size.width-s1.width/2,size.height-s1.height/2));
		labelWelcome2->setPosition(CCPoint(s2.width/2,s2.height/2));
		labelWelcome3->setPosition(ccp(size.width-s3.width/2,s3.height/2));

		addChild(labelWelcome0,1);
		addChild(labelWelcome1,1);
		addChild(labelWelcome2,1);
		addChild(labelWelcome3,1);

		CCLabelTTF * namelabel =  CCLabelTTF::create(G2U("Cocos2d-x,我爱你!"),"微软雅黑",48);
		namelabel->setPosition(ccp(size.width/2,size.height/2));
		addChild(namelabel,1);

转码的方法:

//转码成utf-8,windows默认gb2312
char* HelloWorld::G2U(const char* gb2312)
{
	int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
	wchar_t* wstr = new wchar_t[len+1];
	memset(wstr, 0, len+1);
	MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
	len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
	char* str = new char[len+1];
	memset(str, 0, len+1);
	WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
	if(wstr) delete[] wstr;
	return str;  

}

设置字体颜色:

//设置颜色,其实是一个rgb三原色,0-255的三种组合
		srand((unsigned) time(NULL));
		ccColor3B c0,c1,c2,c3,c4;
		c0.r=rand()%256;
		c0.g=rand()%256;
		c0.b=rand()%256;

		c1.r=rand()%256;
		c1.g=rand()%256;
		c1.b=rand()%256;

		c2.r=rand()%256;
		c2.g=rand()%256;
		c2.b=rand()%256;

		c3.r=rand()%256;
		c3.g=rand()%256;
		c3.b=rand()%256;

		c4.r=rand()%256;
		c4.g=rand()%256;
		c4.b=rand()%256;

		labelWelcome0->setColor(c0);
		labelWelcome1->setColor(c1);
		labelWelcome2->setColor(c2);
		labelWelcome3->setColor(c3);

时间: 2024-08-03 09:11:22

[cocos2d-x]HelloWorldDemo(Mac&Win7两个版本)的相关文章

Leap Motion推出体感控制器应用兼容Mac和PC两平台

硅谷网讯 据国外http://www.aliyun.com/zixun/aggregation/31646.html">媒体报道,LeapMotion周一为其 体感控制器推出LeapAirspace应用商店测试版.该商店目前拥有应用约50个,并定于7月22日与Leap体感控制器一同正式发布. 预计在正式发布后, 应用数量可增加到100个左右. 测试版应用商店的发布,旨在吸引更多 开发者为LeapMotion开发相关应用.目前,大约有1.2万名开发者拥有LeapMotion体感控制器,测试的

《Python硬件编程实战》——2.2 Python的两大版本

2.2 Python的两大版本 目前Python主要有两个大的版本: Python 2 Python 3 Python两大版本的不同写法 关于两种版本的对比,也常写成为 Python 2.x VS Python 3.x Python 2 VS Python 3 py2 VS py3 读者以后看到类似写法,明白其指的是Python 2和Python 3就可以了.2.2.1 Python版本历史 为了更深入地理解Python 2和Python 3的区别,此处先简要介绍Python版本的发展历史. P

同时装有xcode5和6.3,安装插件怎么让两个版本都可以使用

问题描述 同时装有xcode5和6.3,安装插件怎么让两个版本都可以使用 我下载了alcatraz 插件 我的xcode5可以显示Package Manager,但是xcode6.3一直没有,按照网上说的方法试了也没用,怎么回事. 解决方案 http://www.cnblogs.com/ygm900/p/3999349.html

DirectX8 转到 Direct9 以及两个版本渲染效率

问题描述 DirectX8 转到 Direct9 以及两个版本渲染效率 最近把程序从DX8升到Dx9之后发现执行效率下降(用D3D做2D绘制),具体为: 在GTX960 & I7 下DX8渲染帧率400左右 DX9渲染帧率稍微低一点380左右: 在GTX650 & I5 下DX8 200多FPS DX只有60FPS: 然后测试了官方的例子程序Tut06_Meshes (就是那个绘制老虎的例子),在DX8下Render函数的平均执行时间为0.083ms,在Dx9下Render的平均执行时间为

为什么比特币分裂为了两个版本?

想必大家已经知道,比特币社区正在分裂,比特币也正开始分支成两个版本--不光是软件有两个版本,甚至还可能出现两个区块链.这两个分支分别是Bitcoin Core 以及基于其同一程序的微变种程序 Bitcoin XT.到北京时间8月16日时,Bitcoin XT 已经有了一个完整的发行版.这样的分裂此前从未发生过.我想从 Bitcoin XT 开发者的角度来解释这件事:这绝非一时冲动之举. 本文原作者为 Mike Hearn ,比特币联合创始人. 比特币分裂,这一话题可能会让很多人感到好奇,所以,这

安卓中用命令行安装两个版本的app

问题描述 安卓中用命令行安装两个版本的app 安卓中用命令行安装两个版本的app,为什么新版本覆盖不了旧版本,报错,failure[install-failed-already-exists] 解决方案 命令行不行,它是隐性安装,你先把原先的卸了,然后再安装 解决方案二: 应该是你的签名不对...两个不一致.http://blog.csdn.net/crazy1235/article/details/46289803 解决方案三: 应该是你的签名不对...两个不一致.http://blog.cs

openjdk ent inux-同时运行两个版本的JDK

问题描述 同时运行两个版本的JDK Windows系统可以同时运行两个版本的JDKma吗,如果能怎么配置环境变量? 解决方案 运行'cmd'在dos下IP查询及JDk版本检查两个相同版本的TomCat同时运行JDK的两个JVM的区别 解决方案二: 不能同时设置两个,我以前就这样干过,运行软件会出错,只能设置一个JAVA_HOME 解决方案三: 可以有两个版本的JDK,我的就是1.6和1.7的两个,但是JAVA_HOME只能配置一个,我配置的是1.6的,如果你要用1.7的,可以在Eclipse等I

帮忙两个存储过程:查询表中第11-20行的数据(分页)spl server 和orcle两个版本

问题描述 谁帮忙写两个存储过程 急需:查询表中第11-20行的数据(分页)spl server 和orcle两个版本 谢谢 解决方案 SQLServer的 SELECT TOP 页大小 * FROM TestTable WHERE (ID > (SELECT MAX(id) FROM (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id) AS T)) ORDER BY ID ----------------------------------------------

c++-vs2013工程前后两个版本,前面版本调试正确,后面版本把新增代码注释调试错误?

问题描述 vs2013工程前后两个版本,前面版本调试正确,后面版本把新增代码注释调试错误? 这是后面版本报错地方,servprov.h是外部依赖项里面的一个头文件,把新增部分相关的全部注释掉调试也会出现这些报错,好奇怪,编译器有毒? 求解决 解决方案 我也遇到过这个情况,后来无赖只好换回以前的版本 解决方案二: 重定义,说明外部使用.与你增加的部分冲突了 换回以前的版本呢,如果能编译通过,则说明还是你修改的地方出现了问题,再仔细的查查吧. 解决方案三: 这个库本身是否用vs2013编译的,可能是