Cocos2D-X2.2.3学习笔记12(瞬时动作)

Posted jhcelue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cocos2D-X2.2.3学习笔记12(瞬时动作)相关的知识,希望对你有一定的参考价值。

技术分享


到眼下我们已经学习了有

坐标系统

内存管理

UI系统

事件处理

几何图形


今天我们来学习动作管理OK

我们来看看类结构图

CCAction   全部动作的基类

以下派生了三个子类:CCFiniteTimeAction,CCFollow,CCSpeed

这些我们先不看  我们主要来介绍一下瞬时动作,

CCActionInstant  


瞬时动作 故而 一瞬间就完毕的动作,它没有延迟时间的


好的  開始

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"

class HelloWorld : public cocos2d::CCLayer
{
public:
    // Here‘s a difference. Method ‘init‘ in cocos2d-x returns bool, instead of returning ‘id‘ in cocos2d-iphone
    virtual bool init();  

    // there‘s no ‘id‘ in cpp, so we recommend returning the class instance pointer
    static cocos2d::CCScene* scene();
   
    
    // implement the "static node()" method manually
    CREATE_FUNC(HelloWorld);
};

#endif // __HELLOWORLD_SCENE_H__

#include "HelloWorldScene.h"

USING_NS_CC;

CCScene* HelloWorld::scene()
{
    // ‘scene‘ is an autorelease object
    CCScene *scene = CCScene::create();
    
    // ‘layer‘ is an autorelease object
    HelloWorld *layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }
    
    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
	CCSprite* pSprite1= CCSprite::create("Icon.png");
	pSprite1->setPosition(ccp(visibleSize.width/2-pSprite1->getContentSize().width,visibleSize.height/2));
	this->addChild(pSprite1);

	CCSprite* pSprite2= CCSprite::create("Icon.png");
	pSprite2->setPosition(ccp(visibleSize.width/2+pSprite1->getContentSize().width,visibleSize.height/2));
	this->addChild(pSprite2);

    return true;
}

技术分享

我们创建了二个精灵显示,这里主要是为了等下演示翻转动作时候能看出效果来

bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }
    
    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
	CCSprite* pSprite1= CCSprite::create("Icon.png");
	pSprite1->setPosition(ccp(visibleSize.width/2-pSprite1->getContentSize().width,visibleSize.height/2));
	this->addChild(pSprite1);

	//翻转X轴
	//參数:true 翻转   false 不翻转
	CCActionInstant* pFlipX= CCFlipX::create(true);
	pSprite1->runAction(pFlipX);
	//翻转Y轴
	//參数:true 翻转   false 不翻转
	 CCActionInstant* pFlipY=CCFlipY::create(true);
	 pSprite1->runAction(pFlipY);



	CCSprite* pSprite2= CCSprite::create("Icon.png");
	pSprite2->setPosition(ccp(visibleSize.width/2+pSprite1->getContentSize().width,visibleSize.height/2));
	this->addChild(pSprite2);

    return true;
}
技术分享


我们用精灵1运行动作。精灵2什么都不做。明显就看到差别了


显示隐藏动作:

//隐藏动画
	 CCActionInstant* pHide= CCHide::create();
	 pSprite1->runAction(pHide);

	 //显示动画
	 CCActionInstant* pShow= CCShow::create();
	 pSprite1->runAction(pShow);

	 //假设是隐藏运行该动作就显示,假设是显示运行动作后就隐藏
	 CCActionInstant* pToggleVisibility= CCToggleVisibility::create();;
	 pSprite1->runAction(pToggleVisibility);

移动位置动作:


//參数:须要移动到指定的位置
	 CCActionInstant* pPlace= CCPlace::create(ccp(visibleSize.width/2-pSprite1->getContentSize().width,visibleSize.height/2-50));
	 pSprite1->runAction(pPlace);

技术分享


移除动作:

//參数:是否清理内存,true 清理 false 不清理
	 //注:这里的參数可不是是否移除咯
	 CCActionInstant* pRemoveSelf= CCRemoveSelf::create(true);
	 pSprite1->runAction(pRemoveSelf);

OK   瞬时动作就这些。还有几个神马神马Grid,Bsound神马神马的   都不经常使用,以后用到的时候再暂时发挥吧


总结:

瞬时动作基类  CCActionInstant

翻转动作:CCFlipX,CCFlipY

隐藏显示动作:CCHideCCShow CCToggleVisibility

移动位置动作:CCPlace

移除动作:CCRemoveSelf


















以上是关于Cocos2D-X2.2.3学习笔记12(瞬时动作)的主要内容,如果未能解决你的问题,请参考以下文章

Part 9:Cocos2d-x开发基础-动作特效和动画-关东升-专题视频课程

cocos2d-x 动作类

Cocos2D-X2.2.3学习笔记5(UI系统)

Cocos2D-X2.2.3学习笔记9(处理重力感应事件,移植到Android加入两次返回退出游戏效果)

Cocos2D-X2.2.3学习笔记8(处理精灵单击双击和三连击事件)

cocos2d-x学习之路——精灵与动作