Cocos Code IDEを使ってLua言語で、アクションを扱う基本です。
実行環境、IDE | Cocos2d-xバージョン | 言語 |
---|---|---|
Cocos Code IDE Mac OS X 1.0.0-RC2 | Cocos2d-x V3.2 | Lua言語 |
サンプルコード
プロジェクトを新規作成で作成します。(FileメニューのNew->Cocos Lua Project...から作成できます。)
プロジェクト名は適当につけてください。画面は縦画面(portrait)を指定します。
main.luaファイルを修正します。
cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(320, 480, 0) -- 縦画面用に(480, 320, 0)から(320, 480, 0)に変更
--gameScene:playBgMusic() --使わないのでコメントアウト
GameScene.luaを書き換えます。
require "Cocos2d"
require "Cocos2dConstants"
local GameScene = class("GameScene",function()
return cc.Scene:create()
end)
function GameScene.create()
local scene = GameScene.new()
local visibleSize = cc.Director:getInstance():getVisibleSize()
-- スプライトを作成
local sprite = cc.Sprite:create("character.png")
sprite:setPosition(0, 0)
scene:addChild(sprite)
-- アクションを実行
local action = cc.MoveTo:create(3, cc.p(visibleSize.width/2, visibleSize.height/2))
sprite:runAction(action)
return scene
end
return GameScene
適当な画像をcharacter.pngのファイル名でresディレクトリに加えてください。
実行すると、(0,0)から画面中央まで3秒かけてスプライトが移動します。
移動系
Cocos2d-xにはいろいろなアクションが用意されています。ここでは移動に関するアクションの例を示します。
移動する
MoveTo、MoveByを使います。 MoveToはその座標まで、MoveByは現在の座標から指定した座標を加えて移動します。
local action = cc.MoveTo:create(3, cc.p(100, 100))
sprite:runAction(action)
回転する
RotateTo、RotateByを使います。RotateToは指定した角度まで最短方向で回転、RotateByでは現在の角度から値を加えて回転します。
local action = cc.RotateTo:create(3, 45) -- 3秒かけて45度回転
sprite:runAction(action)
ちなみにcreate(3, 720, 0)のように引数を3つにすると、3D座標でX軸中心の回転やY軸中心の回転を行えますが、ここでは割愛します。
拡大縮小
ScaleTo、ScaleByを使います。
local action = cc.ScaleTo:create(3, 2) -- 3秒かけて2倍に拡大
sprite:runAction(action)
ジャンプ
JumpTo、JumpByを使います。
アクションの時間、移動先の座標、ジャンプの高さ、ジャンプの回数をcreateメソッドの引数に指定します。
local action = cc.JumpTo:create(3, cc.p(300, 300), 50, 5) -- 3秒間、(300,300)へ移動、高さ50、ジャンプ5回
sprite:runAction(action)
アクションを連続で実行したり、同時に実行したり、繰り返す、停止する
ここでは複数のアクションを扱う方法や、アクションの停止などの例を示します。
連続してアクションを実行する
複数のアクションを連続して実行するには、Sequenceを使います。
local action1 = cc.MoveTo:create(3, cc.p(100, 100))
local action2 = cc.RotateTo:create(3, 45) -- 3秒かけて45度回転
local sequence = cc.Sequence:create(action1, action2)
sprite:runAction(sequence)
この例では、(100,100)へ移動後に45度回転します。
同時並行でアクションを実行する
複数のアクションを同時並行で実行するには、Spawnを使います。
local action1 = cc.MoveTo:create(3, cc.p(100, 100))
local action2 = cc.RotateTo:create(3, 45) -- 3秒かけて45度回転
local spawn = cc.Spawn:create(action1, action2)
sprite:runAction(spawn)
この例では(100,100)へ45度回転しながら移動します。
アクションを繰り返す
アクションを繰り返すにはRepeat、RepeatForeverを使います。
Repeatは繰り返す回数を指定します。
RepeatForeverは無限に繰り返します。
local action = cc.RotateBy:create(1, 45) -- 1秒かけて45度回転
local repeatAction = cc.Repeat:create(action, 3) -- 3回繰り返す
sprite:runAction(repeatAction)
アクションを停止する
アクションを止めるにはノードのstopAllActionsメソッドやstopActionメソッドを使います。
-- すべてのアクションを停止する
sprite:stopAllActions()
-- 特定のアクションを停止する
sprite:stopAction(action)
一時的にアクションを止めたり、再開する
アクションを一時的に止めたり、再開するにはノードのpauseメソッドやresumeメソッドを使います。
-- アクションを一時停止する
sprite:pause()
-- アクションを再開する
sprite:resume()
その他
よく使いそうなその他のアクションです。
フェードイン・フェードアウト
FadeIn、FadeOut、FadeToを使います。
FadeInは透明の状態から徐々に現れます。最初にスプライトを透明にしておく必要があります。
FadeOutは徐々に透明になります。
FadeToは指定した透明度へ変化します。
sprite:setOpacity(0)
local action = cc.FadeIn:create(3) -- 3秒かけて出現する
sprite:runAction(action)
画像の反転
X方向、またはY方向に画像を反転するには、FlipX、FlipYを使います。
local action = cc.FlipX:create(true)
sprite:runAction(action)
(通常は他のアクションと組み合わせて使います。アクションを使わずに、ただ反転するならsprite:setFlippedX(true)を使います。)
表示、非表示
Showを使うと表示、Hideを使うと非表示です。
local action = cc.Hide:create()
sprite:runAction(action)
ToggleVisibilityは表示・非表示を切り替えます。
local action = cc.ToggleVisibility:create()
sprite:runAction(action)
(これも通常は他のアクションと組み合わせて使います。)
逆方向のアクションを得る
作成したアクションの逆の動作を得るにはreverseメソッドを使います。
(すべてのアクションで、逆の動作を得られるわけではありません。)
local action = cc.RotateBy:create(3, 45) -- 3秒かけて45度回転
sprite:runAction(action:reverse())
一定時間待機する
何もしないで一定時間待機するには、DelayTimeを使います。Sequenceと組み合わせて使うことが多いです。
local action1 = cc.DelayTime:create(3) -- 3秒待機
local action2 = cc.RotateTo:create(3, 45) -- 3秒かけて45度回転
local sequence = cc.Sequence:create({action1, action2})
sprite:runAction(sequence)
アクションの実行で、関数を呼び出す
CallFuncを使います。Sequenceと組み合わせて使うことが多いと思います。
-- 呼ばれる関数を準備
local function func(node)
print("funcが呼ばれました。")
end
-- アクションを実行
local action = cc.RotateTo:create(3, 45) -- 3秒かけて45度回転
local callFunc = cc.CallFunc:create(func)
local sequence = cc.Sequence:create({action, callFunc})
sprite:runAction(sequence)
引数にテーブルのデータを渡すこともできます。
local function func(node, value)
end
local value = {}
local callFunc = cc.CallFunc:create(func, value)
自身を削除する
自身を削除するにはRemoveSelfを使います。これも単体で使うことはなく、他のアクションと組み合わせて使うことになります。
local action = cc.RotateTo:create(3, 45) -- 3秒かけて45度回転
local remove = cc.RemoveSelf:create()
local sequence = cc.Sequence:create({action, remove})
sprite:runAction(sequence)
この例では、3秒かけて45度回転した後、自身のスプライトを削除します。
その他のアクション
その他、アクションについてこちらのサイトにまとめましたので、よかったら参考にしてください。
アクションを利用する - Cocos Code IDEでゲームを作る 逆引き辞典for Lua