Compartilhe efeitos de ação do Cocos2d-x

Cocos2d-x fornece efeitos especiais de ação muito ricos.

Por exemplo: animação em grade, efeitos de distorção, efeitos de flutuação de blocos 3D

código:

#include “ActionEffect.h”

#include “HelloWorldScene.h”

static const char * _actionName [] =

{

“CCFadeOutBLTiles”,

“CCFadeOutDownTiles”,

“CCFadeOutTRTiles”,

“CCFadeOutUpTiles”,

“CCFlipX3D”,

“CCFlipY3D”,

“CCJumpTiles3D”,

“CCLens3D”,

"CCLiquid"

“CCPageTurn3D”,

“CCRipple3D”,

“CCShaky3D”,

“CCShakyTiles3D”,

“CCShatteredTiles3D”,

“CCShuffleTiles”,

“CCSplitCols”,

“CCSplitRows”,

“CCTurnOffTiles”,

“CCTwirl”,

“CCWaves”,

“CCWaves3D”,

“CCWavesTiles3D”

};

CCScene * ActionEffect :: scene ()

{

CCScene * s = CCScene :: criar ();

ActionEffect * layer = ActionEffect :: create ();

s-> addChild (camada);

return s;

}

bool ActionEffect :: init ()

{

CCLayer :: init ();

CCSize winSize = CCDirector :: sharedDirector () -> getWinSize ();

CCNode * c = CCNode :: criar ();

_c = c;

int actionCount = sizeof (_actionName) / sizeof (* _ actionName);

para (int i = 0; i <actionCount; i ++)

{

/ *

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

c-> addChild (bg);

bg-> setPosition (ccp (winSize.width / 2 + i * winSize.width, winSize.height / 2));

* /

Camada CCLayerColor *;

if (i% 2 == 0)

{

camada = CCLayerColor :: criar (ccc4 (192, 192, 192, 255), winSize.width, winSize.height);

}

outro

{

camada = CCLayerColor :: criar (ccc4 (128, 128, 128, 255), winSize.width, winSize.height);

}

c-> addChild (camada);

layer-> setPosition (ccp (i * winSize.width, 0));

/ * Definir Título * /

const char * title = _actionName [i];

CCLabelTTF * rótulo = CCLabelTTF :: criar (título, “Arial”, 36);

camada-> addChild (rótulo, 1000);

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

}

CCScrollView * view = CCScrollView :: create (winSize, c);

view-> setDirection (kCCScrollViewDirectionHorizontal);

view-> setContentSize (CCSize (winSize.width * actionCount, winSize.height));

addChild (ver);

c-> setPositionX ((1 - actionCount) * winSize.width);

// pode tocar

setTouchEnabled (true);

setTouchMode (kCCTouchesOneByOne);

return true;

}

bool ActionEffect :: ccTouchBegan (CCTouch *, CCEvent *)

{

return true;

}

void ActionEffect :: testAction (int idx, camada CCLayerColor *)

{

CCSize winSize = CCDirector :: sharedDirector () -> getWinSize ();

CCSprite * sprite = (CCSprite *) layer-> getUserObject ();

if (sprite == NULL)

{

// sprite = CCSprite :: create (“background3.png”);

sprite = CCSprite :: create (“HelloWorld.png”);

layer-> setUserObject (sprite);

layer-> addChild (sprite);

}

const char * an = _actionName [idx];

CCAction * action = NULL;

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

CCMoveBy * moveBy = CCMoveBy :: create (4, ccp (0, sprite-> getContentSize (). Height / 2 - winSize.height / 2));

// A grade desaparece do canto superior direito para o canto inferior esquerdo

// O primeiro parâmetro: tempo

// O segundo parâmetro: tamanho da grade

if (an == “CCFadeOutBLTiles”)

{

ação = CCFadeOutBLTiles :: criar (5, CCSize (16, 12));

}

// A grade se fecha e desaparece de cima para baixo

// O primeiro parâmetro: tempo

// O segundo parâmetro: tamanho da grade

if (an == “CCFadeOutDownTiles”)

{

action = CCFadeOutDownTiles :: create (5, CCSize (16, 12));

}

// A grade desaparece da parte inferior esquerda para a parte superior direita

if (an == “CCFadeOutTRTiles”)

{

ação = CCFadeOutTRTiles :: criar (5, CCSize (16, 12));

}

// A grade desaparece de baixo para cima

if (an == “CCFadeOutUpTiles”)

{

ação = CCFadeOutUpTiles :: criar (5, CCSize (16, 12));

}

// Cria um efeito de reversão 3D no eixo X

if (an == “CCFlipX3D”) // afeta o toque

{

ação = CCFlipX3D :: criar (5);

}

// Cria um efeito especial reverso 3D do eixo Y

if (an == “CCFlipY3D”)

{

ação = CCFlipY3D :: criar (5) ;;

}

// Efeitos de batimento da grade

if (an == “CCJumpTiles3D”)

{// Parâmetros: tempo, tamanho da grade, tempos, amplitude

ação = CCJumpTiles3D :: criar (5, CCSize (16, 12), 56, 5.0f);

}

// Efeitos especiais de lentes convexas

if (an == “CCLens3D”)

{

// Parâmetros: tempo, tamanho da grade, coordenadas do centro do círculo, raio do círculo

ação = CCLens3D :: criar (5, CCSize (16, 12), ccp (winSize.width / 2, winSize.height / 2), 100);

}

// Efeitos líquidos

if (um == “CCLiquid”)

{

// Parâmetros: tempo, tamanho da grade, velocidade, amplitude

ação = CCLiquid :: criar (56, CCSize (16, 12), 56, 2.0f);

}

// efeitos de viragem de página 3D

if (an == “CCPageTurn3D”)

{

ação = CCPageTurn3D :: criar (5, CCSize (16, 12));

}

// Cria um efeito 3D water porter

if (an == “CCRipple3D”)

{

// Parâmetros: tempo, tamanho da grade, coordenadas, raio, velocidade, amplitude

ação = CCRipple3D :: criar (10, CCSize (16, 12), ccp (winSize.width / 2, winSize.height / 2), 100, 10, 50.0f);

}

// Crie um efeito de vibração 3D

if (an == “CCShaky3D”)

{

// Parâmetros: tempo, tamanho da grade de agitação, intervalo de agitação, se o eixo Z tremeu

ação = CCShaky3D :: criar (10, CCSize (16, 12), 2, verdadeiro);

}

// Crie um efeito de vibração 3D

if (an == “CCShakyTiles3D”)

{

// Parâmetros: tempo, tamanho da grade de agitação, intervalo de agitação, se o eixo Z tremeu

ação = CCShakyTiles3D :: criar (5, CCSize (16, 12), 2, verdadeiro);

}

// Cria um efeito especial de ladrilho quebrado 3D

if (an == “CCShatteredTiles3D”)

{

// Parâmetros: tempo, tamanho da grade de agitação, intervalo de agitação, se o eixo Z tremeu

ação = CCShatteredTiles3D :: criar (1, CCSize (16, 12), 7, verdadeiro);

}

// Tile shuffling efeitos especiais

if (an == “CCShuffleTiles”)

{

// Parâmetros: tempo, tamanho da grade, número aleatório

ação = CCShuffleTiles :: criar (5, CCSize (16, 12), CCRANDOM_0_1 () * 10000);

}

// Efeito de desaparecimento de várias linhas (vertical)

if (an == “CCSplitCols”)

{

// Parâmetros: tempo, número de linhas

ação = CCSplitCols :: criar (5, 9);

}

// Efeito de desaparecimento de várias linhas (horizontal)

if (an == “CCSplitRows”)

{

// Parâmetros: tempo, número de linhas

ação = CCSplitRows :: criar (5, 9);

}

// O quadrado desaparece

if (an == “CCTurnOffTiles”)

{

// Parâmetros: tempo, tamanho da grade, número aleatório

ação = CCTurnOffTiles :: criar (5, CCSize (16, 12));

}

// Crie um efeito de distorção

if (an == “CCTwirl”)

{

// Tempo, tamanho da grade, coordenadas, número de distorções, amplitude

ação = CCTwirl :: criar (5, CCSize (16, 12), ccp (winSize.width / 2, winSize.height / 2), 5, 5.0f);

}

// Cria um efeito de onda

if (an == “CCWaves”)

{

// Parâmetros: tempo, tamanho da grade de vibração, velocidade de flutuação, amplitude, se flutuação horizontal, se flutuação vertical

ação = CCWaves :: criar (5, CCSize (16, 12), 5, 5.0f, verdadeiro, falso);

}

// Crie um efeito de onda 3D

if (an == “CCWaves3D”)

{

// Parâmetros: tempo, tamanho da grade de agitação, velocidade da onda, amplitude

ação = CCWaves3D :: criar (5, CCSize (16, 12), 5, 5.0f);

}

// Crie um efeito de onda em mosaico 3D

if (an == “CCWavesTiles3D”)

{

// Parâmetros: tempo, tamanho da grade de agitação, velocidade da onda, amplitude

ação = CCWavesTiles3D :: criar (5, CCSize (16, 12), 5, 5.0f);

}

if (ação)

{

sprite-> runAction (ação);

}

}

void ActionEffect :: ccTouchEnded (CCTouch * t, CCEvent *)

{

CCPoint ptStart = t-> getStartLocation ();

CCPoint ptEnd = t-> getLocation ();

if (ptStart.getDistanceSq (ptEnd) <= 25)

{

// clique

// Qual janela filha foi clicada

// Converte ptStart para as coordenadas do Container em ScrollView

// Em seguida, julgue a LayerColor que foi clicada

CCPoint ptInContainer = _c-> convertToNodeSpace (ptStart);

CCArray * arr = _c-> getChildren (); // todas as cores da camada

for (int i = 0; i <sizeof (_actionName) / sizeof (* _ actionName); i ++)

{

CCLayerColor * layer = (CCLayerColor *) arr-> objectAtIndex (i);

if (layer-> boundingBox (). containsPoint (ptInContainer))

{

testAction (i, camada);

pausa;

}

}

}

}

Acho que você gosta

Origin blog.csdn.net/qq_21743659/article/details/108595938
Recomendado
Clasificación