没什么编程实战经验的我 ,学一个新东西遇到的困难太多了 ,而且是在版本问题和编译器的使用上...
感谢无脑码农
版本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会保留图片的透明区域(让它看起来是透明的 ) ,如果图片没有透明区域 ,可通用
本人没怎么用过博客 ,所以有些凌乱 ...