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ファイルを修正します。
main.lua/26行目
cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(320, 480, 0) -- 縦画面用に(480, 320, 0)から(320, 480, 0)に変更
main.lua/31行目
--gameScene:playBgMusic() --使わないのでコメントアウト
GameScene.luaを書き換えます。
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 function menuCallback(tag)
print(string.format("メニュー%dが押されました", tag))
end
-- 1つ目のメニュー項目
local menuItem1 = cc.MenuItemImage:create("menu1.png", "menu1_on.png")
menuItem1:setPosition(0, 30)
menuItem1:setTag(1)
menuItem1:registerScriptTapHandler(menuCallback)
-- 2つ目のメニュー項目
local menuItem2 = cc.MenuItemImage:create("menu2.png", "menu2_on.png")
menuItem2:setPosition(0, -30)
menuItem2:setTag(2)
menuItem2:registerScriptTapHandler(menuCallback)
-- メニュー項目からメニューを作成してシーンへ追加
local menu = cc.Menu:create(menuItem1, menuItem2)
menu:setPosition(visibleSize.width/2, visibleSize.height/2)
scene:addChild(menu)
return scene
end
return GameScene
メニュー用の画像に、menu1.png、menu1_on.png、menu2.png、menu2_on.pngを用意してresディレクトリに追加します。
menu1.png menu1_on.png
menu2.png menu2_on.png
解説
メニュー選択時に呼ばれるコールバック関数を準備する
関数名は何でもかまいません。tagには選択されたメニューのタグ番号が入って呼ばれます。
この関数の中にメニューが呼ばれた時の処理を実装します。
-- メニュー選択時に呼ばれるコールバック関数
local function menuCallback(tag)
print(string.format("メニュー%dが押されました", tag))
end
(修正:functionの前にlocalが抜けていました。)
メニュー項目を作成する
画像からメニュー項目を作成しています。createの1番目の引数に通常時の画像、2番めに押された時の画像を設定します。
次に、メニュー項目の位置とタグを設定しています。
registerScriptTapHandlerメソッドでコールバック関数を指定しています。
local menuItem1 = cc.MenuItemImage:create("menu1.png", "menu1_on.png")
menuItem1:setPosition(0, 30)
menuItem1:setTag(1)
menuItem1:registerScriptTapHandler(menuCallback)
メニュー項目からメニューを作成する
Menuクラスのcreateメソッドでメニュー項目(menuItem1, menuItem2)を指定してメニューを作成しています。
その後、メニューの表示位置を指定して、シーンへ追加しています。
local menu = cc.Menu:create(menuItem1, menuItem2)
menu:setPosition(visibleSize.width/2, visibleSize.height/2)
scene:addChild(menu)