鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 手机系统开发 > android > >

x for android:士兵听我的命令移动

来源:互联网 作者:佚名 时间:2012-12-23 13:50
上一篇文章讲述了利用cocos2d-x构建精灵的动画效果,今天打算以此为引子,创建一个在移动时同时指挥角色到我手指触摸的移动地点,那么就开始吧。 开始 本篇要点 角色(Sprite)缓存 涉及到的要学的学习点: 角色移动点击由此进入--cocos2d-x for android:Simp

上一篇文章讲述了利用cocos2d-x构建精灵的动画效果,今天打算以此为引子,创建一个在移动时同时指挥角色到我手指触摸的移动地点,那么就开始吧。

开始

本篇要点

  • 角色(Sprite)缓存
  • 涉及到的要学的学习点:

  • 角色移动点击由此进入-->cocos2d-x for android:SimpleGame分析
  • 播放动画点击由此进入-->cocos2d-x for android:CCSprite 精灵动画­
  • 角色缓存

    角色缓存使用CCSpriteFrameCache ,香港空间,配合CCSpriteBatchNode将图片*.plist和*.png 加载进内存,方便以后调用。

     

    以上为动作序列图,图片名称为:sg.png.图片来源于博客园:nowpaper.

    角色缓存代码如下:

    CCSpriteFrameCache* cache=CCSpriteFrameCache::sharedSpriteFrameCache();
    cache->addSpriteFramesWithFile();

        sprite=CCSprite::createWithSpriteFrameName();
        sprite->setPosition(ccp(size.width-sprite->getContentSize().width,size.height/2));
        spriteBatchNode=CCSpriteBatchNode::create();
        spriteBatchNode->addChild(sprite);
         addChild(spriteBatchNode);

     以上代码,CCSpriteFrameCache负责加载sg.plist,CCSpriteBatchNode负责加载sg.png,然后创建一个精灵指定初始化位置和精灵纹理,并添加进CCSpriteBatchNode。通过上面的代码即可以将一个plist序列图加载进缓存了,你要做的就是将这些缓存的数据拿出来操作它。

     

    动画缓存

    上面己经将数据加载进缓存了,可以使用其中的那些节点来制作动画缓存了。

    缓存动画使用 CCAnimationCache,该动画同样需要使用到plist文件,代码如下

     

     

    CCAnimationCache *animCache = CCAnimationCache::sharedAnimationCache();

        animCache->addAnimationsWithFile();

     在将plist文件添加完后,香港服务器,即可以通过动画Animation将每一个动画的Animation添加进CCAnimationCache了,这里我写了一个函数,香港虚拟主机,代码见下方

     

    CCAction* HelloWorld::createAction(int begin,int end,char* cacheActionName,CCPoint point){
        CCAnimationCache *animCache = CCAnimationCache::sharedAnimationCache();//得到一个缓存对象
        CCArray *array = CCArray::createWithCapacity(end-begin);

        char name[20];
        for(int i = begin ;i<end;i++){
            sprintf(name,,i);
            CCSpriteFrame* frame =cache->spriteFrameByName(name);
            array->addObject(frame);
        }//以上创建一个动作序列集合

        CCAnimation *plistAnimation = CCAnimation::createWithSpriteFrames(array,0.2f);//通过动作序列集合创建animation
         animCache->addAnimation(plistAnimation, cacheActionName);//添加进缓存并指定缓存名称

        array->removeAllObjects();

        CCAnimation *animation = animCache->animationByName(cacheActionName);//通过缓存名称得到一个动画
        animation->setRestoreOriginalFrame(true);
        CCAnimate *ani=CCAnimate::create(animation);
        CCActionInterval* plistSeq=(CCActionInterval*)(CCSequence::create(ani,
            CCFlipX::create(point.x>0true:false),
            ani->copy()->autorelease(),
            NULL
        ));
        return CCRepeatForever::create(plistSeq);//创建动画并返回Action
    }

     

    触摸精灵到我指定的移动地点

    设定好让程序允许Touch之后,在回调函数ccTouchesEnded 里面通过捕获触摸位置指定精灵移动,代码见下方

     

    CCTouch* touch=(CCTouch*)(touches->anyObject());  
         CCPoint location = touch ->getLocation();
         float offX=location.x-sprite->getPosition().x; 
         float offY=location.y-sprite->getPosition().y; 
         
         walkAction=createAction(,ccp(offX,offY));
         
         sprite->setFlipX(offX>0?true:false);

        
         float realX=offY/offX;
          CCPoint realDeast =ccp(location.x,location.y);
          CCActionInterval *actionTo=CCMoveTo::create(2.2f,realDeast);
        CCAction *moveToAction=CCSequence::create(
            actionTo,
            CCCallFunc::create(this,callfunc_selector(HelloWorld::moveDone)),
            NULL
        );

      sprite->runAction(moveToAction);

    ok了,精灵移动了,但你会发现,你想让精灵移动的时候不是一整张图片移动,而是边移动边两只脚在走路的移动,就像是我们人类一样,是走着过去的,而不是幽灵飘过去的,那么,我们要做些什么呢?

    动作移动

    其实,很简单 ,只要记住要精灵移动的时候即:MoveTo时,同时再让精灵执行一个动作即walk的动作,代码如下:

    网友评论
    <