Cocos2d-X使用CCAnimation创建动画

Cocos2d-X使用CCAnimation创建动画,第1张

概述动画在游戏中是非常常见的 程序1:创建一个简单的动画 首先需要在工程目录下的Resource文件夹中放一张有各种不同动作的图片 在程序中添加下面的代码 #include "Animation.h"CCScene* Animation::scene(){ CCScene* s = CCScene::create(); Animation* layer = Animation:

动画在游戏中是非常常见的


程序1:创建一个简单的动画

首先需要在工程目录下的Resource文件夹中放一张有各种不同动作的图片


在程序中添加下面的代码

#include "Animation.h"CCScene* Animation::scene(){    CCScene* s = CCScene::create();    Animation* layer = Animation::create();    s->addChild(layer);    return s;}bool Animation::init(){  cclayer::init();    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //创建精灵    CCSprite* sp = CCSprite::create();    sp->setposition(ccp(winSize.wIDth / 2,winSize.height / 2));    addChild(sp);    //精灵放大4倍    sp->setScale(4);    //创建纹理    CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage("walkleft.png");    //创建一个数组    CCArray* arr = CCArray::create();    //从纹理中扣了10帧frame,组成数组    for(int i = 0; i < 10; i++)    {        //使用纹理创建精灵帧        //第一个参数:纹理        //第二个参数:矩形        CCSpriteFrame* frame = CCSpriteFrame::createWithTexture(texture,//第一个参数:矩形的x坐标            //第二个参数:矩形的y坐标            //第三个参数:矩形的宽度            //第四个参数:矩形的高度            CCRect(i*18,18,32));        arr->addobject(frame);    }    //使用精灵帧创建动画    //第一个参数:数组    //第二个参数:动画的帧数(播放两张图片的间隔时间)    CCAnimation* animation = CCAnimation::createWithSpriteFrames(arr,0.1f);    CCAnimate* animate = CCAnimate::create(animation);    //播放动画    //CCRepeatForever::create动画播放无限次    sp->runAction(CCRepeatForever::create(animate));    return true;}


执行结果:


程序2:有pList文件的动画加载

首先需要在工程目录下的Resource文件夹中放一张有各种不同动作的图片和一个pList文件

pList格式的文件实际上是一个XML文件,文件中的内容

<?xml version="1.0" enCoding="UTF-8"?><!DOCTYPE pList PUBliC "-//Apple Computer//DTD PList 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><pList version="1.0">    <dict>        <key>frames</key>        <dict>            <key>Boom_1.png</key>            <dict>                <key>frame</key>                <string>{{204,305},{99,99}}</string>                <key>offset</key>                <string>{0,0}</string>                <key>rotated</key>                <false/>                <key>sourcecolorRect</key>                <string>{{0,0},99}}</string>                <key>sourceSize</key>                <string>{99,99}</string>            </dict>            <key>Boom_10.png</key>            <dict>                <key>frame</key>                <string>{{103,307},99}</string>            </dict>            <key>Boom_11.png</key>            <dict>                <key>frame</key>                <string>{{103,206},99}</string>            </dict>            <key>Boom_12.png</key>            <dict>                <key>frame</key>                <string>{{105,2},99}</string>            </dict>            <key>Boom_13.png</key>            <dict>                <key>frame</key>                <string>{{103,105},99}</string>            </dict>            <key>Boom_14.png</key>            <dict>                <key>frame</key>                <string>{{2,{101,101}}</string>                <key>offset</key>                <string>{0,101}}</string>                <key>sourceSize</key>                <string>{101,101}</string>            </dict>            <key>Boom_15.png</key>            <dict>                <key>frame</key>                <string>{{2,408},99}</string>            </dict>            <key>Boom_16.png</key>            <dict>                <key>frame</key>                <string>{{2,99}</string>            </dict>            <key>Boom_17.png</key>            <dict>                <key>frame</key>                <string>{{2,99}</string>            </dict>            <key>Boom_18.png</key>            <dict>                <key>frame</key>                <string>{{2,99}</string>            </dict>            <key>Boom_2.png</key>            <dict>                <key>frame</key>                <string>{{204,204},99}</string>            </dict>            <key>Boom_3.png</key>            <dict>                <key>frame</key>                <string>{{406,103},99}</string>            </dict>            <key>Boom_4.png</key>            <dict>                <key>frame</key>                <string>{{305,99}</string>            </dict>            <key>Boom_5.png</key>            <dict>                <key>frame</key>                <string>{{204,99}</string>            </dict>            <key>Boom_6.png</key>            <dict>                <key>frame</key>                <string>{{408,99}</string>            </dict>            <key>Boom_7.png</key>            <dict>                <key>frame</key>                <string>{{307,99}</string>            </dict>            <key>Boom_8.png</key>            <dict>                <key>frame</key>                <string>{{206,99}</string>            </dict>            <key>Boom_9.png</key>            <dict>                <key>frame</key>                <string>{{103,99}</string>            </dict>        </dict>        <key>Metadata</key>        <dict>            <key>format</key>            <integer>2</integer>            <key>realTexturefilename</key>            <string>PFBoom.png</string>            <key>size</key>            <string>{512,512}</string>            <key>texturefilename</key>            <string>PFBoom.png</string>        </dict>    </dict></pList>

程序代码:

#include "Animation.h"CCScene* Animation::scene(){    CCScene* s = CCScene::create();    Animation* layer = Animation::create();    s->addChild(layer);    return s;}//有pList文件的动画加载bool Animation::init(){    cclayer::init();    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    //创建精灵    CCSprite* sp = CCSprite::create();    sp->setposition(ccp(winSize.wIDth / 2,winSize.height / 2));    addChild(sp);    //精灵放大4倍    sp->setScale(4);    //创建精灵帧缓存    CCSpriteFrameCache* frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();	    //创建数组    CCArray* arr = CCArray::create();	    //添加PList文件    frameCache->addSpriteFramesWithfile("PFBoom.pList");	for (int i = 1; i <= 18; i++)	{		char key[128];        //通过名字获取精灵帧所在的图片		sprintf(key,"Boom_%d.png",i);        //将图片添加到精灵帧中		CCSpriteFrame* frame = frameCache->spriteFrameByname(key);        //将精灵帧添加到数组中		arr->addobject(frame);	}    //使用数组创建动画	CCAnimation* animation = CCAnimation::createWithSpriteFrames(arr,0.1f);	CCAnimate* animate = CCAnimate::create(animation);    //动画消失	CCCallFunc* callfunc = CCCallFunc::create(sp,callfunc_selector(CCSprite::removeFromParent));    CCSequence* seq = CCSequence::create(animate,callfunc,NulL);	    //播放动画   sp->runAction(seq);       return true;}

执行结果:


程序3:通过鼠标实现动画切换

首先创建一个Animation类

在AnimationPreload.h中添加下面代码

#ifndef __AnimationPreload_H__#define __AnimationPreload_H__#include "cocos2d.h"USING_NS_CC;class AnimationPreload : public cclayer{public:    static CCScene* scene();        bool init();    CREATE_FUNC(AnimationPreload);        bool cctouchBegan(CCtouch*,CCEvent*);    CCSprite* sp;};#endif

在AnimationPreload.cpp中添加下面的代码

#include "AnimationPreload.h"CCScene* AnimationPreload::scene(){    CCScene* s = CCScene::create();    AnimationPreload* layer = AnimationPreload::create();    s->addChild(layer);    return s;}bool AnimationPreload::init(){    //chushihu    cclayer::init();    //获取窗口的大小    CCSize winSize = CCDirector::sharedDirector()->getWinSize();	//(创建纹理)从纹理里扣了10帧frame,组成数组	CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage("walkleft.png");	    //创建数组    CCArray* arr = CCArray::create(); //retain	    for (int i = 9; i >= 0; i--)	{        //创建精灵帧		CCSpriteFrame* frame = CCSpriteFrame::createWithTexture(texture,CCRect(i*18,32));        //将精灵帧添加到数组中		arr->addobject(frame);	}	// 通过数组创建动画	CCAnimation* animation = CCAnimation::createWithSpriteFrames(arr,0.05f);	// 加入到缓存	CCAnimationCache::sharedAnimationCache()->addAnimation(animation,"MarioRun");		/***************************************************************/	/** 有pList文件的动画加载 **/    //创建精灵帧缓存	CCSpriteFrameCache* frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();    //创建数组	arr = CCArray::create();    //将pList文件添加到精灵帧缓存中	frameCache->addSpriteFramesWithfile("PFBoom.pList");	for (int i = 1; i <= 18; i++)	{		char key[128];         //通过名字获取精灵帧所在的图片  		sprintf(key,i);        //将图片添加到精灵帧中		CCSpriteFrame* frame = frameCache->spriteFrameByname(key);        //将精灵帧添加到数组中		arr->addobject(frame);	}	    //创建动画    animation = CCAnimation::createWithSpriteFrames(arr,0.1f);	    // 加入到缓存	CCAnimationCache::sharedAnimationCache()->addAnimation(animation,"PlaneBOOM");	sp = CCSprite::create();	sp->setposition(ccp(winSize.wIDth / 2,winSize.height / 2));	addChild(sp);    //精灵方法4倍    sp->setScale(4);		// settouch	settouchEnabled(true);	settouchMode(kCCtouchesOneByOne);	return true;}bool AnimationPreload::cctouchBegan(CCtouch*,CCEvent*){   sp->stopAllActions();	static int i = 1;	    if (i == 1)	{		sp->runAction(CCAnimate::create(			CCAnimationCache::sharedAnimationCache()->animationByname("PlaneBOOM")			));	}	else	{		sp->runAction(CCAnimate::create(			CCAnimationCache::sharedAnimationCache()->animationByname("MarioRun")			));	}	i = 1 - i;	    return 0;}


执行结果:


  总结

以上是内存溢出为你收集整理的Cocos2d-X使用CCAnimation创建动画全部内容,希望文章能够帮你解决Cocos2d-X使用CCAnimation创建动画所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1006438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存