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

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

感谢无脑码农 

版本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会保留图片的透明区域(让它看起来是透明的 ) ,如果图片没有透明区域 ,可通用


本人没怎么用过博客 ,所以有些凌乱 ... 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
### 回答1: cocos2d-x js是一个开源的游戏开发引擎,用于开发跨平台的2D游戏,它使用JavaScript作为脚本语言。以下是对cocos2d-x js的回答。 cocos2d-x js是cocos2d-x引擎的JavaScript版本,它继承了cocos2d-x引擎强大的功能和性能,同时提供了使用JavaScript编写游戏的便利性。 cocos2d-x js通过使用JavaScript脚本语言进行游戏开发,使得开发者可以更加方便地编写游戏逻辑和动作表现。JavaScript是一种简单易用的脚本语言,对于不熟悉复杂编程语言的开发者来说,使用JavaScript进行游戏开发会更加容易上手。 cocos2d-x js提供了丰富的游戏功能和API,包括精灵动画、物理引擎、碰撞检测、场景管理等,这些功能可以帮助开发者快速构建2D游戏。同时,cocos2d-x js还提供了跨平台的支持,可以将游戏轻松移植到不同的平台上,如iOS、Android、Windows等。 除了基本的功能和API,cocos2d-x js还支持插件和扩展,开发者可以根据自己的需求进行扩展和定制,以满足游戏的特殊需求。 总结来说,cocos2d-x js是一个强大而灵活的游戏开发引擎,它提供了使用JavaScript进行游戏开发的便利性,同时具备跨平台的支持和丰富的功能和API。无论是初学者还是有经验的开发者,都可以通过cocos2d-x js来快速构建出高质量的2D游戏。 ### 回答2: Cocos2d-x是一款强大的跨平台游戏开发引擎,具有许多独特而且强大的功能。cocos2d-x jsCocos2d-x引擎的JavaScript版本,它可以让开发者使用JavaScript编写游戏逻辑和界面。 使用Cocos2d-x js,开发者可以轻松地创建2D游戏,并在多个平台上运行,如iOS、Android、Windows和Web。这意味着开发者只需编写一次代码,就可以发布到多个平台,大大提高了开发效率。 cocos2d-x js提供了丰富的API和功能,使得开发复杂的游戏变得轻松。它包括图形渲染、动画系统、物理引擎、碰撞检测、音频管理等功能,开发者可以利用这些功能创建出丰富多样的游戏体验。 此外,cocos2d-x js还支持现代开发工具和技术,如可视化编辑器Cocos Creator,可实时调试和热更新等。开发者可以使用Cocos Creator创建游戏场景、编辑动画、创建粒子效果等。同时,Cocos2d-x js还集成了调试工具,方便开发者进行错误排查和优化。 总之,Cocos2d-x js是一个非常强大且灵活的游戏开发引擎。它提供了广泛的功能和工具,使得开发者能够快速创建高质量的2D游戏,并在多个平台上发布。无论是初学者还是有经验的开发者,都可以通过Cocos2d-x js轻松实现独特而丰富的游戏体验。 ### 回答3: Cocos2d-x js是一种使用Javascript编写的跨平台游戏开发框架。它是基于Cocos2d-x引擎的扩展,可以在多个平台上运行,包括iOS、Android、Windows和Mac等。 Cocos2d-x js提供了丰富的游戏开发工具和功能,可以帮助开发人员轻松创建高质量的游戏应用。它具有优秀的性能和灵活性,并且能够快速部署到各种平台上。 使用Cocos2d-x js,开发人员可以使用熟悉的Javascript语言进行游戏开发,而无需学习其他编程语言。它提供了一系列API和组件,例如精灵、动作、节点和场景等,以简化游戏的创建和管理过程。 此外,Cocos2d-x js还提供了多种功能,如物理引擎、碰撞检测、音效播放和动画效果等,可以帮助开发人员实现各种游戏特效和交互效果。 Cocos2d-x js还支持一些常用的开发模式和工具,如游戏UI编辑器、游戏调试器和性能分析器等,方便开发人员进行游戏开发和调试。 总之,Cocos2d-x js是一款功能强大、易于使用并且跨平台的游戏开发框架。无论是新手还是经验丰富的开发人员,都可以借助它来创建出令人印象深刻的游戏应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值