スプライトを使おう (3/4)
作成:2015-06-06 09:15
更新:2015-06-06 09:15
更新:2015-06-06 09:15
■MoveTo/MoveByによるアニメーション
スプライトは、ゲームの中であちこちに動きまわるキャラクタを実現するのに用いられます。ということは、「動かす」ということがとても重要になってきます。
単に表示位置を移動するだけなら、setPositionで行うことができます。が、アニメーションはそうはいきません。これは、専用のクラスを利用するのです。
アニメーションなどの動きは、「アクション」と呼ばれます。これは、cocos2d:Actionというクラスのサブクラスとして作成されます。スプライトを動かす場合、もっとも基本となるのは「MoveTo」と「MoveBy」の2つのアクションクラスでしょう。
●MoveTo
●MoveBy
●アクションの実行
――では、簡単な利用例を挙げておきましょう。下のリストは、実行すると10秒かけて右に300ドット移動します。MoveToを使っていますが、MoveByを使えばもっとシンプルに、create(10, Vec2(300, 0))といった具合に作れますね!
単に表示位置を移動するだけなら、setPositionで行うことができます。が、アニメーションはそうはいきません。これは、専用のクラスを利用するのです。
アニメーションなどの動きは、「アクション」と呼ばれます。これは、cocos2d:Actionというクラスのサブクラスとして作成されます。スプライトを動かす場合、もっとも基本となるのは「MoveTo」と「MoveBy」の2つのアクションクラスでしょう。
●MoveTo
auto 変数 = MoveTo::create( 時間 , 《Vec2》);MoveToは、引数にVec2で指定した地点まで、一定時間をかけて移動します。例えば、create(10, Vec2(0, 0))とすれば、ゼロ地点まで10秒かけて移動するアニメーションが作れます。
●MoveBy
auto 変数 = MoveBy::Create( 時間 , 《Vec2》);こちらは、現在地点から指定した距離だけ離れた場所に移動するためのものです。Vec2では、今の場所からどれだけ離れたところか、を値として指定します。例えば、create(10, Vec2(100, 100))とすると、現在地点から横に100、上に100ドット離れた場所まで10秒かけて移動するアニメーションが作られます。
●アクションの実行
《Sprite》->runAction(《Action》);作成したアクションのインスタンスは、そのままでは動きません。runActionを実行して、初めてアニメーションが動きます。MoveTo/MoveByに限らず、Actionのサブクラスは全てこのrunActionで実行します。――では、簡単な利用例を挙げておきましょう。下のリストは、実行すると10秒かけて右に300ドット移動します。MoveToを使っていますが、MoveByを使えばもっとシンプルに、create(10, Vec2(300, 0))といった具合に作れますね!
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
#pragma execution_character_set("utf-8")
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if (!Layer::init())
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
Director::getInstance()->setDisplayStats(false); // stats OFF
auto sprite = Sprite::create("character.png");
sprite->setAnchorPoint(Vec2(0.5, 0.5));
sprite->setPosition(origin.x + 100,
origin.y + visibleSize.height / 2);
this->addChild(sprite, 1);
auto moveto = MoveTo::create(10, Vec2(sprite->getPosition().x + 300,
sprite->getPosition().y));
sprite->runAction(moveto);
return true;
}
※関連コンテンツ
「初心者のためのCocos2d-xゲームプログラミング入門」に戻る