cocos2d-x 3.0 Action
10696 ワード
出典を明記してください.http://blog.csdn.net/lttree********************************************
余談:
久、久、久、久、久、木有更新
8月、韓国に9日間旅行して、帰ってきて、直接井岡山に行って実践活動に参加しました(課題はアンドロイドアプリを作ることです)
はい、今井岡山実践基地にいます.19日に帰らなければなりません.
そして、やっとWIFIに繋がって、ブログを送れるようになりました.
本文:
今回はcococos 2 d-xについてのActionですが、動作とか、いろいろな動作とか、これの勉強は、cococos 2 d-xの例によるといいでしょう.
{
PS:サンプルプログラムの開き方:
VS 2012でプロジェクトを開く:
->cococos 2 d-xフォルダの下
——buildフォルダの下
cocos2d-win32.vc 2012プロジェクト
}
このブログでは、7つのテストプログラムを通じて、基本的なアクションを示します.
一、Manual Transformation————精霊に対する基本設定
二、MoveToとMoveBy――精霊の基本動作(順番実行動作)
三、Span+Rotate————精霊の基本動作(同時に動作)
四、DelayTime:m+delay+m――動作の遅延実行
五、RepeatとRepeatForever――繰り返し実行
六、Follow Action————動作に従う
七、Sequence of InstantActions――終了メカニズム
はい、プログラムを実行しながら、コードを見て、を勉強することができます.
ファイルはActionTestを見ることができます.cpp
実行中のプログラムでAction-Basicを選択して表示
-最初のテスト-
Manual Transformation
コードの位置は次のとおりです.
コードから見ると、
オブジェクトに対する一連のアクション:
ここの関数はOnEnterなのに、なぜInitではないのか気づいたかもしれません.
ここではOnEnterとInitの違いについてお話しします.
Init:オブジェクトの初期化時に実行される関数.
OnEnter:オブジェクトが表示されたときに実行される関数.(表示されている場合のみ実行されます)
-2番目のテスト-
2つ目のテストはMoveToとMoveByについてのテストです
コード:
ここで特に注意したいのは、一連の動作を順次実行できるSequenceです.
次は自分で見ることができますが、
APIを借りると、簡単にわかります.
-3番目のテストプログラム-
このテストプログラムはSpan+Rotateです
これは、2つの動作を同時に実行させることです.
JumpBy::create(2,Point(300,0),50,4)
ジャンプの語句.
RotateBy::create(2,720)
文を反転します.
Sequenceと同様に、Spawnは複数の動作を同時に行うために使用できます.
4番目のテストプログラム
これはDelayTime:m+delay+m
中間に遅延時間を追加します.
明らかに、Sequenceを使って、順番に実行して、中間に遅延文DelayTimeを加えればいいです.
-5番目のテストプログラム-
RepeatとRepeatForever
Repeatは一定回数の動作を行う.
Repeat::createには2つのパラメータがあります.1つ目は繰り返しが必要な動作、2つ目の繰り返しの回数です.
繰り返し回数の値は、1~2^30の間の符号なし整数です.
対応するRepeatForeverには回数のパラメータがなく、1つのパラメータしかありません.
-6番目のテストプログラム-
Follow Action
追従を設定する文では、2番目のパラメータは動作に関する境界であり、パラメータがRect::ZEROに設定されている場合、すなわち境界がない.
-7番目のテストプログラム-
Sequence of InstantActions
CallFunc::create文で、
CC_CALLBACK_0はパラメータがないことを示し、Action使用時に適用
CC_CALLBACK_1はパラメータが1つしかないことを示し、Menuの使用時に適用
CC_CALLBACK_2はバインディングに2つのパラメータがあることを示し、一般的にユーザーの単点タッチ、多点タッチに用いられる.
******まとめ******
Action:
——基本動作
MoveTo/MoveBy
RoatTo/RoatBy
JumpTo/JumpBy
.......
——組み合わせ動作
Sequenceシーケンス実行
Spawn同時実行
——動作の取逆
Reverse
——動作の繰り返し実行
Repeat
RepeatForever
——関数動作
CallFucn::create()
うん、ここまでだよ~
参考資料:沈先生
出典を明記してください.http://blog.csdn.net/lttree********************************************
余談:
久、久、久、久、久、木有更新
8月、韓国に9日間旅行して、帰ってきて、直接井岡山に行って実践活動に参加しました(課題はアンドロイドアプリを作ることです)
はい、今井岡山実践基地にいます.19日に帰らなければなりません.
そして、やっとWIFIに繋がって、ブログを送れるようになりました.
本文:
今回はcococos 2 d-xについてのActionですが、動作とか、いろいろな動作とか、これの勉強は、cococos 2 d-xの例によるといいでしょう.
{
PS:サンプルプログラムの開き方:
VS 2012でプロジェクトを開く:
->cococos 2 d-xフォルダの下
——buildフォルダの下
cocos2d-win32.vc 2012プロジェクト
}
このブログでは、7つのテストプログラムを通じて、基本的なアクションを示します.
一、Manual Transformation————精霊に対する基本設定
二、MoveToとMoveBy――精霊の基本動作(順番実行動作)
三、Span+Rotate————精霊の基本動作(同時に動作)
四、DelayTime:m+delay+m――動作の遅延実行
五、RepeatとRepeatForever――繰り返し実行
六、Follow Action————動作に従う
七、Sequence of InstantActions――終了メカニズム
はい、プログラムを実行しながら、コードを見て、を勉強することができます.
ファイルはActionTestを見ることができます.cpp
実行中のプログラムでAction-Basicを選択して表示
-最初のテスト-
Manual Transformation
コードの位置は次のとおりです.
//------------------------------------------------------------------
//
// ActionManual
//
//------------------------------------------------------------------
void ActionManual::onEnter()
{
ActionsDemo::onEnter();
auto s = Director::getInstance()->getWinSize();
_tamara->setScaleX( 2.5f);
_tamara->setScaleY( -1.0f);
_tamara->setPosition( Point(100,70) );
_tamara->setOpacity( 128);
_grossini->setRotation( 120);
_grossini->setPosition( Point(s.width/2, s.height/2));
_grossini->setColor( Color3B( 255,0,0));
_kathia->setPosition( Point(s.width-100, s.height/2));
_kathia->setColor( Color3B::BLUE);
}
std::string ActionManual::subtitle() const
{
return "Manual Transformation";
}
コードから見ると、
オブジェクトに対する一連のアクション:
//------------------------------------------------------------------
//
// ActionManual
//
//------------------------------------------------------------------
void ActionManual::onEnter()
{
ActionsDemo::onEnter();
// OpenGL
auto s = Director::getInstance()->getWinSize();
// :
// X
_tamara->setScaleX( 2.5f);
// Y
_tamara->setScaleY( -1.0f);
//
_tamara->setPosition( Point(100,70) );
//
_tamara->setOpacity( 128);
// :
//
_grossini->setRotation( 120);
_grossini->setPosition( Point(s.width/2, s.height/2));
//
_grossini->setColor( Color3B( 255,0,0));
<span style="white-space:pre"> </span>// :
_kathia->setPosition( Point(s.width-100, s.height/2));
_kathia->setColor( Color3B::BLUE);
}
std::string ActionManual::subtitle() const
{
return "Manual Transformation";
}
ここの関数はOnEnterなのに、なぜInitではないのか気づいたかもしれません.
ここではOnEnterとInitの違いについてお話しします.
Init:オブジェクトの初期化時に実行される関数.
OnEnter:オブジェクトが表示されたときに実行される関数.(表示されている場合のみ実行されます)
-2番目のテスト-
2つ目のテストはMoveToとMoveByについてのテストです
コード:
//------------------------------------------------------------------
//
// ActionMove
//
//------------------------------------------------------------------
void ActionMove::onEnter()
{
ActionsDemo::onEnter();
centerSprites(3);
auto s = Director::getInstance()->getWinSize();
// :
// ,
auto actionTo = MoveTo::create(2, Point(s.width-40, s.height-40));
// , 80, 80,
auto actionBy = MoveBy::create(2, Point(80,80));
// actionBy
auto actionByBack = actionBy->reverse();
//
// actionTo
_tamara->runAction( actionTo);
// actionBy actionByBack ( actionBy, actionByBack)
_grossini->runAction( Sequence::create(actionBy, actionByBack, NULL));
// MoveTo ( : 1 , , 40)
_kathia->runAction(MoveTo::create(1, Point(40,40)));
}
std::string ActionMove::subtitle() const
{
return "MoveTo / MoveBy";
}
ここで特に注意したいのは、一連の動作を順次実行できるSequenceです.
次は自分で見ることができますが、
APIを借りると、簡単にわかります.
-3番目のテストプログラム-
このテストプログラムはSpan+Rotateです
//------------------------------------------------------------------
//
// ActionSpawn
//
//------------------------------------------------------------------
void ActionSpawn::onEnter()
{
ActionsDemo::onEnter();
alignSpritesLeft(1);
auto action = Spawn::create(
JumpBy::create(2, Point(300,0), 50, 4),
RotateBy::create( 2, 720),
NULL);
_grossini->runAction(action);
}
std::string ActionSpawn::subtitle() const
{
return "Spawn: Jump + Rotate";
}
これは、2つの動作を同時に実行させることです.
JumpBy::create(2,Point(300,0),50,4)
ジャンプの語句.
RotateBy::create(2,720)
文を反転します.
Sequenceと同様に、Spawnは複数の動作を同時に行うために使用できます.
4番目のテストプログラム
これはDelayTime:m+delay+m
中間に遅延時間を追加します.
//------------------------------------------------------------------
//
// ActionDelayTime
//
//------------------------------------------------------------------
void ActionDelayTime::onEnter()
{
ActionsDemo::onEnter();
alignSpritesLeft(1);
auto move = MoveBy::create(1, Point(150,0));
auto action = Sequence::create( move, DelayTime::create(2), move, NULL);
_grossini->runAction(action);
}
std::string ActionDelayTime::subtitle() const
{
return "DelayTime: m + delay + m";
}
明らかに、Sequenceを使って、順番に実行して、中間に遅延文DelayTimeを加えればいいです.
-5番目のテストプログラム-
RepeatとRepeatForever
//------------------------------------------------------------------
//
// ActionRepeat
//
//------------------------------------------------------------------
void ActionRepeat::onEnter()
{
ActionsDemo::onEnter();
alignSpritesLeft(2);
auto a1 = MoveBy::create(1, Point(150,0));
auto action1 = Repeat::create(
Sequence::create( Place::create(Point(60,60)), a1, NULL) ,
3);
auto action2 = RepeatForever::create(
Sequence::create(a1->clone(), a1->reverse(), NULL)
);
_kathia->runAction(action1);
_tamara->runAction(action2);
}
std::string ActionRepeat::subtitle() const
{
return "Repeat / RepeatForever actions";
}
Repeatは一定回数の動作を行う.
Repeat::createには2つのパラメータがあります.1つ目は繰り返しが必要な動作、2つ目の繰り返しの回数です.
繰り返し回数の値は、1~2^30の間の符号なし整数です.
対応するRepeatForeverには回数のパラメータがなく、1つのパラメータしかありません.
-6番目のテストプログラム-
Follow Action
//------------------------------------------------------------------
//
// ActionFollow
//
//------------------------------------------------------------------
void ActionFollow::onEnter()
{
ActionsDemo::onEnter();
centerSprites(1);
auto s = Director::getInstance()->getWinSize();
//
_grossini->setPosition(Point(-200, s.height / 2));
//
auto move = MoveBy::create(2, Point(s.width * 3, 0));
auto move_back = move->reverse();
//
auto seq = Sequence::create(move, move_back, NULL);
//
auto rep = RepeatForever::create(seq);
_grossini->runAction(rep);
// ,creat , ,
this->runAction(Follow::create(_grossini, Rect(0, 0, s.width * 2 - 100, s.height)));
}
追従を設定する文では、2番目のパラメータは動作に関する境界であり、パラメータがRect::ZEROに設定されている場合、すなわち境界がない.
-7番目のテストプログラム-
Sequence of InstantActions
//------------------------------------------------------------------
//
// ActionSequence2
//
//------------------------------------------------------------------
void ActionSequence2::onEnter()
{
ActionsDemo::onEnter();
alignSpritesLeft(1);
// ,false
_grossini->setVisible(false);
//
auto action = Sequence::create(
Place::create(Point(200,200)),
Show::create(),
MoveBy::create(1, Point(100,0)),
// ,
CallFunc::create( CC_CALLBACK_0(ActionSequence2::callback1,this)),
CallFunc::create( CC_CALLBACK_0(ActionSequence2::callback2,this,_grossini)),
CallFunc::create( CC_CALLBACK_0(ActionSequence2::callback3,this,_grossini,0xbebabeba)),
NULL);
_grossini->runAction(action);
}
CallFunc::create文で、
CC_CALLBACK_0はパラメータがないことを示し、Action使用時に適用
CC_CALLBACK_1はパラメータが1つしかないことを示し、Menuの使用時に適用
CC_CALLBACK_2はバインディングに2つのパラメータがあることを示し、一般的にユーザーの単点タッチ、多点タッチに用いられる.
******まとめ******
Action:
——基本動作
MoveTo/MoveBy
RoatTo/RoatBy
JumpTo/JumpBy
.......
——組み合わせ動作
Sequenceシーケンス実行
Spawn同時実行
——動作の取逆
Reverse
——動作の繰り返し実行
Repeat
RepeatForever
——関数動作
CallFucn::create()
うん、ここまでだよ~
参考資料:沈先生
出典を明記してください.http://blog.csdn.net/lttree********************************************