3Animation动画的创建,CCSpeed,CCFollow



  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);

}


运行结果:

时间: 2024-10-25 06:39:14

3Animation动画的创建,CCSpeed,CCFollow的相关文章

Cocos2d-X使用CCAnimation创建动画

动画在游戏中是很常见的 程序1:创建一个简单的动画 首先须要在project文件夹下的Resource文件夹中放一张有各种不同动作的图片 在程序中加入以下的代码 #include "Animation.h" CCScene* Animation::scene() { CCScene* s = CCScene::create(); Animation* layer = Animation::create(); s->addChild(layer); return s; } bool

创建Material Design风格的Android应用--使用自定义动画

动画在Material Design设计中给用户反馈放用户点击时,并且在程序用户界面中提供连贯的视觉.Material主题为按钮(Button)和activity的转换提供了一些默认的动画,在android5.0(api 21)和更高的版本,你可以自定义这些动画和创建一个新动画: Touch feedback(触摸反馈) Circular Reveal(循环揭露效果) Activity transitions(Activity转换效果) Curved motion(曲线运动) View stat

cocos2d-x在Lua中添加3d模型创建3D动画

--3d模型和3D动画的创建 require"Cocos2d" local Sprite3DScene=class("Sprite3DScene",function() return cc.Scene:create() end) --添加create函数 function Sprite3DScene:create() local scene=Sprite3DScene.new() scene:addChild(scene:init()) return scene e

UE4的编程C++创建一个FPSproject(两)角色网格、动画、HUD、子弹类

立即归还,本文将总结所有这些整理UE4有关角色的网络格.动画.子弹类HUD一个简单的实现. (五)角色加入网格 Character类为我们默认创建了一个SkeletaMeshComponent组件,所以我们只须要做的就是使用哪一个静态网格模型.接下来我们为我们的FPSCharacter类创建一个蓝图,这样我们能够简单的把资源指定给静态网格模型这里,而且方便以后操作加入的组件. 作为開始,我们首先要导入一个第三人称的静态网格模型.最后我们设置成两个网格,一个是我们自己看的,另外一个是其它人看到的.

unity 在代码中创建spine动画组件

项目中用到了spine动画,使用Assetbundle打包后,在手机上运行会出现丢材质的情况.如果不进行打包,直接放到Resources目录下是可以正常加载的,但是,这样包就会很大,而且也不能进行热更新.进过测试,发现在代码中创建spine组件是可以解决这个问题,于是就有了下面的方案. 我们先说方案,再说问题. 方案: spine动画制作人员提供的spine动画三个文件分别是.json,.atlas,.png,把这三个文件放到unity(我用的unity版本是5.3.4f1)中,会自动生成atl

Web动画API教程1:创建基本动画

转载自http://www.w3cplus.com/css3/web-animations-api-tutorial-part-1-creating-a-basic-animation.html 我们已经初步了解了统一web动画API的内容,但是我们还没有真正去对规范的细节进行探讨,所以现在开始吧. WAAPI为你提供了比你用于CSS动画更多的控件,但是在了解它们之前,我们先打一下基础:如何使用这个API创建一个基本的动画? 创建一个关键帧动画 如果你对CSS Transition和animat

Expression Blend 的点滴(2)--利用可视化状态创建神奇翻转动画

原文:Expression Blend 的点滴(2)--利用可视化状态创建神奇翻转动画 首先,来看下实现后的效果: 关于VisulaState VisualState 指定控件处于特定状态时的外观.例如,按下 Button 时,它的边框颜色可能与正常时的颜色不同.VisualState 类具有更改控件外观的 Storyboard属性.控件进入 VisualState.Name 属性指定的状态时,Storyboard 开始.控件退出该状态时,Storyboard 停止. 以上是silverligh

前端基础学习--CSS3创建简单的网页动画 – 实现弹跳球动

基础准备对于这个实现,我们需要一个简单的 div ,并且样式类名为 ball : HTML 代码: <div class="ball"></div> 我们将使用 Flexbox 布局,把球放到页面中间,尺寸为 100px * 100px,背景色为橘×××. CSS 代码: body { display: flex; /* 使用Flex布局 */ justify-content: center; /* 水平居中 */ } .ball { width: 100px;

GIF动画,菊花动画,UIView动画,CoreAnimation动画(CALayer动画)的用法

1.GIF动画 1 // 创建一个显示图片的imageView // viewController创建 2 UIImageView *showGifImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 414, 736)]; 3 [self.view addSubview:showGifImageView]; 4 5 6 //创建一个存储图片的数组 7 NSMutableArray *saveImageViewArray