您的位置:首页 > 移动开发 > Cocos引擎

【cocos2d-x 初学者学习篇】实现字符串 ,图片 ,按钮,动画

2013-11-03 08:57 405 查看
没什么编程实战经验的我 ,学一个新东西遇到的困难太多了 ,而且是在版本问题和编译器的使用上...

感谢无脑码农 

版本cocos2d-x  2.0.x    vs2010

在字符串,图片,按钮方面 ,没有什么问题 , 在绘制动画的时候 ,很多方法并不是简单create()的,在下面代码中可以看到具体的方法

我们要添加任何东西 ,应该遵循:

 创建 ->设置位置->加入目标地 

cocos2d-x 多了一个验证指针有效性的宏 : CC_BREAK_IF

那么我们可以归纳出添加组件的四个步骤:

1, 得到对象指针,并初始化

2, 检测指针

3, 设置坐标点

4, 加入目标图层

#include "HelloWorldScene.h"

using namespace cocos2d;

CCScene* HelloWorld::scene()
{
CCScene * scene = NULL; //生成场景指针
do
{
// 'scene' is an autorelease object
scene = CCScene::create();
CC_BREAK_IF(! scene);

// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create(); //多态
CC_BREAK_IF(! layer);

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

// return the scene
return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
bool bRet = false;
do
{
/*        //////////////////////////////////////////////////////////////////////////
// super init first
//////////////////////////////////////////////////////////////////////////

CC_BREAK_IF(! CCLayer::init());

//////////////////////////////////////////////////////////////////////////
// add your codes below...
//////////////////////////////////////////////////////////////////////////

// 1. Add a menu item with "X" image, which is clicked to quit the program.

// Create a "close" menu item with close icon, it's an auto release object.
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback));
CC_BREAK_IF(! pCloseItem); //每写一个新的指针 ,都需要这个宏来验证它是否正常

// Place the menu item bottom-right conner.
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));

// Create a menu with the "close" menu item, it's an auto release object.
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
CC_BREAK_IF(! pMenu);

// Add the menu to HelloWorld layer as a child layer.
this->addChild(pMenu, 1);

// 2. Add a label shows "Hello World".

// Create a label and initialize with string "Hello World".
CCLabelTTF* pLabel = CCLabelTTF::create("First App", "Arial", 24);
CC_BREAK_IF(! pLabel);

// Get window size and place the label upper.
CCSize size = CCDirector::sharedDirector()->getWinSize();
pLabel->setPosition(ccp(size.width / 2, size.height - 50));

// Add the label to HelloWorld layer as a child layer.
this->addChild(pLabel, 1);

// 3. Add add a splash screen, show the cocos2d splash image.
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
CC_BREAK_IF(! pSprite);

// Place the sprite on the center of the screen
pSprite->setPosition(ccp(size.width/2, size.height/2));

// Add the sprite to HelloWorld layer as a child layer.
this->addChild(pSprite, 0);
*/
//首先是父类的方法
CC_BREAK_IF(!CCLayer::init());
//创建一个CCLabelTTF对象指针,用来绘制字符串,它是一个自动释放的对象
CCLabelTTF* pLabel = CCLabelTTF::create("MyGame","Arial",14) ;
//检测
CC_BREAK_IF(!pLabel);
//获得屏幕高度
CCSize size = CCDirector::sharedDirector()->getWinSize();
//设置坐标点
pLabel->setPosition(ccp(size.width/2,size.height/2));
//将pLabel添加到当前创建
this->addChild(pLabel,2);

//添加图片
/*	//创建一个CCSprite的指针  绘制图片 它是一个自动释放的对象
CCSprite* pSprite = CCSprite::create("Hello.jpg");
//检测
CC_BREAK_IF(!pSprite);
//设置坐标点
pSprite->setPosition(ccp(size.width/2,size.height/2+50));
//添加到图层
this->addChild(pSprite,1);
*/

//创建文本按钮
CCLabelTTF* pBtn = CCLabelTTF::create("StartGame","Arial",50);
//检测
CC_BREAK_IF(!pBtn) ;
//创建menu
CCMenuItemLabel* pItemLabel = CCMenuItemLabel::create(pBtn);
//检测
CC_BREAK_IF(!pItemLabel);
//设置位置
pItemLabel->setPosition(ccp(size.width/2,100));
/*	//生成menu层
CCMenu* pMenu =CCMenu::create(pItemLabel,NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu,3);
*/

/*	通过CCMenuItemFont文字直接生成按钮 */
//使用CCMenuItemFont 创建一个文本按钮
CCMenuItemFont* pItemFont = CCMenuItemFont::create("Font Button" ,this,NULL);
CC_BREAK_IF(! pItemFont);
pItemFont->setPosition(size.width/2,70);
/*	//生成menu层
CCMenu* pMenu = CCMenu::create(pItemLabel,pItemFont,NULL);
//设置位置
pMenu->setPosition(CCPointZero);
//添加显示
this->addChild(pMenu,3);
*/
/*利用图片生成按钮*/
//添加初始化
CCMenuItemImage* pItemImage = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,NULL);
//检测
CC_BREAK_IF(!pItemImage);
//设置位置
pItemImage->setPosition(size.width-50,50);

//生成menu层
CCMenu* pMenu = CCMenu::create(pItemLabel,pItemFont,pItemImage,NULL);
//设置位置
pMenu->setPosition(CCPointZero);
//添加显示
this->addChild(pMenu,4);

//动画显示:

//读取2d纹理
CCTexture2D *pTexture=CCTextureCache::sharedTextureCache()->addImage("girl.png");
//创建动画帧
CCSpriteFrame *frame0=CCSpriteFrame::frameWithTexture(pTexture,CCRectMake(32*0, 48*0, 32, 48));
CCSpriteFrame *frame1=CCSpriteFrame::frameWithTexture(pTexture,CCRectMake(32*1, 48*0, 32, 48));
CCSpriteFrame *frame2=CCSpriteFrame::frameWithTexture(pTexture,CCRectMake(32*2, 48*0, 32, 48));
CCSpriteFrame *frame3=CCSpriteFrame::frameWithTexture(pTexture,CCRectMake(32*3, 48*0, 32, 48));
//创建帧数组
CCArray* pArray=CCArray::arrayWithCapacity(4);
pArray->addObject(frame0);
pArray->addObject(frame1);
pArray->addObject(frame2);
pArray->addObject(frame3);
//创建动画
CCAnimation* animation=CCAnimation::createWithSpriteFrames(pArray,0.5f);
CC_BREAK_IF(!animation);
//初始化并设置一个Sprite
CCSprite* girlSprite=CCSprite::spriteWithTexture(pTexture);
CC_BREAK_IF(!girlSprite);

//设置坐标点
girlSprite->setPosition(ccp(size.width/2,size.height/2));
this->addChild(girlSprite,2);

//使用animation生成animate
CCAnimate* animate=CCAnimate::actionWithAnimation(animation);
CC_BREAK_IF(!animate);
girlSprite->runAction(CCRepeatForever::create(animate));

bRet = true;
} while (0);

return bRet;
}

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
// "close" menu item clicked
CCDirector::sharedDirector()->end();
}


完整代码:(整个HelloWorldScene.cpp) [  我晕 ,为什么没有语法高亮  ? 求高人指导 ...  ]

一些需要补充的细节:

1 ,如何将图片加入:

首先把图片放到项目的resource文件夹下面 (从计算机操作)

然后通过在vs的项目中的 resource文件夹 ,右键 ,添加已有项即可

2 ,关于png和jpg  ?

png会保留图片的透明区域(让它看起来是透明的 ) ,如果图片没有透明区域 ,可通用

本人没怎么用过博客 ,所以有些凌乱 ... 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2d-x 动画