zoukankan      html  css  js  c++  java
  • cocos2d-x精灵的添加和移动

    由于工作需要,这几天需要研究下cocos2d-x,貌似有好久没学机器学习了= 。=!

    首先要做的是准备工作:把精灵的图片添加到工程中,在visual stadio2010下如图所示:


    然后选择你需要的精灵图片,添加就完成了。

    创建过程如下:

            
    CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //返回界面的size,有两个属性width和height,界面的原点在左下方
    CCSprite *player = CCSprite::create("Player.png", 
    CCRectMake(0, 0, 27, 40) );//创建精灵,create的第二个参数表示图像中对应的像素矩形
     player->setPosition( ccp(player->getContentSize().width/2, winSize.height/2) );    //设置位置点    
    this->addChild(player);//把精灵加到当前图层中
    

    精灵的添加主要分下面四步(cocos2d-x中大多数组件的添加都是这四步)

    1、通过create创建精灵对象,返回对象的指针

    2、检查下对象是否创建成功,cocos2d-x中有一个宏,可以这样用  CC_BREAK_IF( ! sprite );

    3、设置精灵对象的坐标,这个坐标是opengl坐标,原点在左下角

    4、把相应的组件加到图层中

    CCRectMake(int x, int y, int width, int height)这个函数解释下,四个参数分别为矩形左下角的坐标和它的宽度和高度

    这样精灵就添加完成了,接下去是精灵的移动。

    首先需要设置一个定时器

        this->schedule( schedule_selector(HelloWorld::gameLogic), 1.0 );
    void schedule (SEL_SCHEDULE selector, float interval)

    两个参数分别是需要调用的回调函数和回调函数响应的时间间隔。

    这个函数需要在图层init函数返回前设置完成。


    精灵的移动代码如下:

    	
            CCSprite *target = CCSprite::create("girls.png", CCRectMake(32*0, 48*0, 32, 48) );
    	CCSize winSize = CCDirector::sharedDirector()->getWinSize();
            。。。。。。。。。。。
    
    
    	CCFiniteTimeAction* actionMove = 
            CCMoveTo::create( (float)actualDuration, 
                               ccp( winSize.width/2, actualY) );
            CCFiniteTimeAction* actionMoveDone = 
            CCCallFuncN::create( this, 
                                 callfuncN_selector(HelloWorld::spriteMoveFinished));
            target->runAction( CCSequence::create(actionMove, 
                                 actionMoveDone, NULL) );
    



    CCMoveTocreate它时两个参数分别是移动的时间(单位是秒)和移动终点的点坐标。移动这个动作时继承与Action类的,这个类是CCFiniteTimeAction,MoveTo::create它时两个参数分别是移动时间(单位是秒)和终点坐标。然后再设定移动时的回调函数CCCallFuncN::create(Object *,SEL_CallFuncN)两个参数分别是调用回调函数的对象指针和回调函数指针。

    最后调用 精灵对象的runAction(CCAction *)函数,CCSequence::Create参数分别是CCFiniteTimeAction表示不同的动作,这个参数是可变的,只需要把动作加进去就行


    另外需要注意的是:在cocos2d-x中,所有的组件比如,精灵,布景层,场景,label,动作都是创建在堆中的,所以调用时必须用->来调用

    回调函数有五种,分别是:

    定义在 cocos2dxincludeselector_protocol.h中


    schedule_selector
    callfunc_selector
    callfuncN_selector
    callfuncND_selector
    menu_selector

    根据不同的需要来选取不同的回调函数类型




  • 相关阅读:
    ubuntu sudo 号令有效处理
    shell脚本的主笔、存储、实行
    Oracle 11gR1中细粒度访谒收集处事(4)
    Solaris效力经管工具 SMF快速入门指南(1)
    Solaris 10完成宁静Kerberos身份验证(2)
    高质量C /C编程指南第2章 程序的版式
    Solaris 10下设置EJB 3.0景遇(1)
    高质量C /C编程指南序言
    Java学习之路:不走弯路,就是捷径 www.51testing.com
    两个结构体可以直接赋值吗? 回复 "JohnsonAnother" 的问题
  • 原文地址:https://www.cnblogs.com/JackieZhu/p/4190459.html
Copyright © 2011-2022 走看看