3Animation动画的创建,CCSpeed,CCFollow-阿里云开发者社区

开发者社区> 涂作权> 正文

3Animation动画的创建,CCSpeed,CCFollow

简介:  动画,不同于动作,动画并非属性的改变。而是对帧的播放。 2 方法一 CCSprite * sp = CCSprite::create(“animation/p_2_01.png”); sp->setPosition(ccp(240,160)); //注意:这里的CCRectMake中的参数都是相对自己来
+关注继续查看

  1. 动画,不同于动作,动画并非属性的改变。而是对帧的播放。

2 方法一

CCSprite * sp = CCSprite::create(“animation/p_2_01.png”);

sp->setPosition(ccp(240,160));

//注意:这里的CCRectMake中的参数都是相对自己来说的,前两个参数定义了一个点,80,80表示的是矩形的长,宽。

CCSpriteFrame * frame1 =

CCSpriteFrame::create("animation/p_2_01.png",CCRectMake(0,0,80,80))

;

CCSpriteFrame * frame2 =

CCSpriteFrame::create("animation/p_2_02.png",CCRectMake(0,0,80,80))

;

CCSpriteFrame * frame3 =

CCSpriteFrame::create("animation/p_2_03.png",CCRectMake(0,0,80,80))

;

CCSpriteFrame * frame4 =

CCSpriteFrame::create("animation/p_2_04.png",CCRectMake(0,0,80,80))

;

CCSpriteFrame * frame5 =

CCSpriteFrame::create("animation/p_2_05.png",CCRectMake(0,0,80,80))

;

CCSpriteFrame * frame6 =

CCSpriteFrame::create("animation/p_2_06.png",CCRectMake(0,0,80,80))

;

CCSpriteFrame * frame7 =

CCSpriteFrame::create("animation/p_2_07.png",CCRectMake(0,0,80,80))

;

CCSpriteFrame * frame8 =

CCSpriteFrame::create("animation/p_2_08.png",CCRectMake(0,0,80,80))

;

 

CCAnimation * animation = CCAnimation::create();

animation->addSpriteFrame(frame1);

animation->addSpriteFrame(frame2);

animation->addSpriteFrame(frame3);

animation->addSpriteFrame(frame4);

animation->addSpriteFrame(frame5);

animation->addSpriteFrame(frame6);

animation->addSpriteFrame(frame7);

animation->addSpriteFrame(frame8);

 

animation->setDelayPerUnit(0.1f);

animation->setLoops(kCCRepeatForever);

 

CCAnimate *animate = CCAnimate::create(animation);

sp->runAction(animate);

 

addChild(sp);

3 方法二(对一的改进)

CCSprite * sp = CCSprite::create(“animation/p_2_01.png”);

sp->setPosition(ccp(240,160));

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFrameWithFile(“animation/plant.plist”);

char bufname[100];

CCArray * array = CCArray::create();

for(int I = 1;i<= 8;i++) {

memset(bufname,”p_2_0%d.png”,i);

CCSpriteFrame * frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(bufname);

array->addObject(frame);

}

CCAnimation * animation = CCAnimation::createWithSpriteFrames(array,0.2f);

animation->setLoops(kCCRepeatForever);

 

CCAnimate * animate = CCAnimate::create(animation);

addChild(sp);

4 更简单的

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(“animation/plant.plist”);

char bufname[100];

CCAnimation * animation = CCAnimation::create();

for(int i = 1;i<=8;i++){

memset(bufname,sizeof(bufname),0);

sprint(bufname,”p_2_0%d.png”,i);

animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(bufname));

}

animation->setDelayPerUnit(0.2f);

animation->setLoops(kCCRepeatForever);

5 案例说明:

T14Animation.h

#ifndef __T14Animation_H__

#define __T14Animation_H__

 

#include "cocos2d.h"

#include "TBack.h"

USING_NS_CC;

class T14Animation :public TBack

{

public:

    static CCScene * scene();

    CREATE_FUNC(T14Animation);

    bool init();

 

    CCSprite *spr;

    void onEnter();

    void onEnterTransitionDidFinish();

};

 

#endif

T14Animation.cpp

#include "T14Animation.h"

#include "AppMacros.h"

 

CCScene *T14Animation::scene()

{

    CCScene * scene = CCScene::create();

    T14Animation * layer = T14Animation::create();

    scene->addChild(layer);

    return scene;

}

 

bool T14Animation::init()

{

    TBack::init();

    return true;

}

 

//在进入场景的时候做以下操作

void T14Animation::onEnter()

{

    TBack::onEnter();

    //以图片的方式创建一个精灵

    spr = CCSprite::create("animation/p_2_01.png");

    //设置精灵的显示位置

    spr->setPosition(ccp(winSize.width / 2, winSize.height / 2));

    addChild(spr);

}

 

void T14Animation::onEnterTransitionDidFinish()

{

    TBack::onEnterTransitionDidFinish();

    //plist中是图片信息

    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("animation/plant.plist");

 

    //创建动画

    CCAnimation * animation = CCAnimation::create();

    //这个用于存储图片的名字

    char  nameBuf[100];

    for (int i = 0; i < 8; i++)

    {

        memset(nameBuf, 0, sizeof(nameBuf));

        sprintf(nameBuf, "p_2_0%d.png", i + 1);

        animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(nameBuf));

    }

    //设置每次动画执行的时候的延时

    animation->setDelayPerUnit(0.1f);

    //这只循环两次

    animation->setLoops(2);

 

    CCAnimate * animate = CCAnimate::create(animation);

    spr->runAction(animate);

}

动画效果(2秒钟内循环执行了20次):

6 CCSpeed CCFollow

案例:

T15Speed.h

#ifndef _T15Speed_H__

#define _T15CCSpeed_H__

 

#include "cocos2d.h"

#include "TBack.h"

USING_NS_CC;

class T15Speed :public TBack

{

public:

    static CCScene * scene();

    CREATE_FUNC(T15Speed);

    bool init();

 

    //英雄这个精灵

    CCSprite * hero;

    //食物这个精灵

    CCSprite * food;

 

    CCMoveBy * by;

    void update(float dt);

};

 

#endif

T15Speed.cpp

#include "T15Speed.h"

#include "AppMacros.h"

 

CCScene *T15Speed::scene()

{

    CCScene * scene = CCScene::create();

    T15Speed * layer = T15Speed::create();

    scene->addChild(layer);

    return scene;

}

 

bool T15Speed::init()

{

    TBack::init();

 

    hero = CCSprite::create("animation/hero.png");

    hero->setPosition(ccp(100, 160));

    addChild(hero);

 

    by = CCMoveBy::create(10, ccp(300, 0));

    hero->runAction(by);

 

    food = CCSprite::create("animation/food.png");

    food->setPosition(ccp(200, 160));

    addChild(food);

   

    //因为小人跑动的姿势都是一幅幅的动画效果组成,所以下面通过

    //CCSpriteFrameCache的方式加载一系列的图片

    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("animation/run.plist");

    //创建动画效果

    CCAnimation * animation = CCAnimation::create();

 

    char nameBuf[100];

    for (int i = 0; i < 15;i++)

    {

        memset(nameBuf, 0, sizeof(nameBuf));

        //取出图片等信息

        sprintf(nameBuf, "run%d.png", i + 1);

        animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(nameBuf));

    }

    //图片切换的时候的时间延迟为0.1f

    animation->setDelayPerUnit(0.1f);

    //下面的方式表示永久循环

    animation->setLoops(-1);

    CCAnimate * animate = CCAnimate::create(animation);

    hero->runAction(animate);

 

    //开启定时器

    scheduleUpdate();

    return true;

}

 

 

void T15Speed::update(float dt)

{

    //boundingBox()缩放

    CCRect heroRect = CCRect(hero->boundingBox().origin.x + 50,

        hero->boundingBox().origin.y,

        hero->boundingBox().size.width - 100,

        hero->boundingBox().size.height);

    //通过下面的方式实现:当人碰到豌豆了的时候移除豌豆

    if (food&&heroRect.intersectsRect(food->boundingBox()))

    {

        //通过下面这句实现将food从主窗口中清除

        food->removeFromParentAndCleanup(true);

        food = NULL;

 

        //通过CCSpeed将原来的速度增加5

        CCSpeed * speed = CCSpeed::create(by, 5);

        hero->runAction(speed);

    }

}

运行结果:

吃豆之后:

CCFollow

T16CCFollow.h

#include "T16CCFollow.h"

#include "AppMacros.h"

 

CCScene *T16CCFollow::scene()

{

    CCScene * scene = CCScene::create();

    T16CCFollow * layer = T16CCFollow::create();

    scene->addChild(layer);

    return scene;

}

 

bool T16CCFollow::init()

{

    TBack::init();

    //背景

    CCSprite * bg = CCSprite::create("map.png");

    //设置锚点

    bg->setAnchorPoint(ccp(0, 0));

    addChild(bg);

 

    //创建一个英雄的精灵

    hero = CCSprite::create("animation/hero.png");

    hero->setPosition(ccp(240, 160));

    addChild(hero);

 

    //下面的代码是添加动画的代码

    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("animation/run.plist");

    CCAnimation * animation = CCAnimation::create();

 

    char nameBuf[100];

    for (int i = 0; i < 15; i++)

    {

        memset(nameBuf, 0, sizeof(nameBuf));

        sprintf(nameBuf, "run%d.png", i + 1);

        animation->addSpriteFrame(

            CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(nameBuf));

    }

    animation->setDelayPerUnit(0.1f);

    animation->setLoops(-1);

    CCAnimate * animate = CCAnimate::create(animation);

    hero->runAction(animate);

 

    by = CCMoveBy::create(10, ccp(400, 0));;

 

    //添加假动作

    CCCallFuncN * func = CCCallFuncN::create(this, callfuncN_selector(T16CCFollow::funcNCallBack));

 

    CCSequence * seq = CCSequence::create(by, func, NULL);

    hero->runAction(seq);

 

    //使用CCFollow的方式创建英雄

    CCFollow * follow = CCFollow::create(hero);

    this->runAction(follow);

    return true;

}

 

void T16CCFollow::funcNCallBack(CCNode * node)

{

    CCSprite * spr = (CCSprite *)node;

    CCLog("x = %g, y = %g", spr->getPositionX(), spr->getPositionY());

 

    CCPoint world = this->convertToWorldSpace(spr->getPosition());

 

    CCLog("x = %g, y = %g", world.x, world.y);

}

T16CCFollow.cpp

#include "T16CCFollow.h"

#include "AppMacros.h"

 

CCScene *T16CCFollow::scene()

{

    CCScene * scene = CCScene::create();

    T16CCFollow * layer = T16CCFollow::create();

    scene->addChild(layer);

    return scene;

}

 

bool T16CCFollow::init()

{

    TBack::init();

    //背景

    CCSprite * bg = CCSprite::create("map.png");

    //设置锚点

    bg->setAnchorPoint(ccp(0, 0));

    addChild(bg);

 

    //创建一个英雄的精灵

    hero = CCSprite::create("animation/hero.png");

    hero->setPosition(ccp(240, 160));

    addChild(hero);

 

    //下面的代码是添加动画的代码

    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("animation/run.plist");

    CCAnimation * animation = CCAnimation::create();

 

    char nameBuf[100];

    for (int i = 0; i < 15; i++)

    {

        memset(nameBuf, 0, sizeof(nameBuf));

        sprintf(nameBuf, "run%d.png", i + 1);

        animation->addSpriteFrame(

            CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(nameBuf));

    }

    animation->setDelayPerUnit(0.1f);

    animation->setLoops(-1);

    CCAnimate * animate = CCAnimate::create(animation);

    hero->runAction(animate);

 

    by = CCMoveBy::create(10, ccp(400, 0));;

 

    //添加假动作

    CCCallFuncN * func = CCCallFuncN::create(this, callfuncN_selector(T16CCFollow::funcNCallBack));

 

    CCSequence * seq = CCSequence::create(by, func, NULL);

    hero->runAction(seq);

 

    //使用CCFollow的方式创建英雄

    CCFollow * follow = CCFollow::create(hero);

    this->runAction(follow);

    return true;

}

 

void T16CCFollow::funcNCallBack(CCNode * node)

{

    CCSprite * spr = (CCSprite *)node;

    CCLog("x = %g, y = %g", spr->getPositionX(), spr->getPositionY());

 

    CCPoint world = this->convertToWorldSpace(spr->getPosition());

 

    CCLog("x = %g, y = %g", world.x, world.y);

}

运行结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
前端笔记:css3动画transition和animation
前端笔记:css3动画transition和animation
22 0
CSS3 Animation Cheat Sheet:实用的 CSS3 动画库
  CSS3 Animation Cheat Sheet 是一组预设的动画库,为您的 Web 项目添加各种很炫的动画。所有你需要做的是添加样式表到你的网站,为你想要添加动画效果的元素应用预制的 CSS 类就可以了。
808 0
3Animation动画的创建,CCSpeed,CCFollow
 动画,不同于动作,动画并非属性的改变。而是对帧的播放。 2 方法一 CCSprite * sp = CCSprite::create(“animation/p_2_01.png”); sp-&gt;setPosition(ccp(240,160)); //注意:这里的CCRectMake中的参数都是相对自己来
790 0
Openstack_通用模块_Oslo_vmware 创建 vCenter 虚拟机快照
目录 目录 前文列表 创建虚拟机快照 最后 前文列表 Python Module_oslo.vmware_连接 vCenter Openstack_通用模块_Oslo_vmware 创建/删除 vCenter 虚拟机 创建虚拟机快照 vSphere Create Snapshot 文档 Snapshot 是虚拟机磁盘文件(VMDK)在某个点及时的复本。
1002 0
我的Android进阶之旅------&gt;Android之动画之Frame Animation实例
============================首先看看官网上关于Frame animation的介绍================================ 地址:http://developer.
918 0
+关注
涂作权
java,架构,编程语言相关专家
1234
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载