require "Cocos2d"
require "Cocos2dConstants"
-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
cclog("----------------------------------------")
cclog("LUA ERROR: " .. tostring(msg) .. "\n")
cclog(debug.traceback())
cclog("----------------------------------------")
return msg
end
local function main()
collectgarbage("collect")
--避免内存泄漏
collectgarbage("setpause", 100)
collectgarbage("setstepmul", 5000)
--初始化导演
local director = cc.Director:getInstance()
local glview = director:getOpenGLView()
if glview == nil then
glview = cc.GLView:createWithRect("HelloLua", cc.rect(0, 0, 960, 640))
director:setOpenGLView(glview)
end
glview:setDesignResolutionSize(960, 640, cc.ResolutionPolicy.SHOW_ALL)
--显示帧率
director:setDisplayStats(true)
--设置帧率
director:setAnimationInterval(1.0 / 60)
--增加搜索路径
cc.FileUtils:getInstance():addSearchPath("src")
cc.FileUtils:getInstance():addSearchPath("res")
--创建场景
local scene = require("GameScene")
local settingScene = scene.create()
--运行场景
if cc.Director:getInstance():getRunningScene() then
cc.Director:getInstance():replaceScene(settingScene)
else
cc.Director:getInstance():runWithScene(settingScene)
end
end
xpcall(main, __G__TRACKBACK__)
require "Cocos2d"
require "Cocos2dConstants"
-- 定义常量
kSequence = 102
kSpawn = 103
kRepeate = 104
kRepeatForever1 = 105
kReverse = 106
local size = cc.Director:getInstance():getWinSize()
local debug = true
cclog = function(...)
if debug then
print(string.format(...))
end
end
local GameScene = class("GameScene",function()
local scene = cc.Scene:createWithPhysics()
scene:getPhysicsWorld():setDebugDrawMask(cc.PhysicsWorld.DEBUGDRAW_ALL)
return scene
end)
function GameScene:ctor()
self.visibleSize = cc.Director:getInstance():getVisibleSize()
self.origin = cc.Director:getInstance():getVisibleOrigin()
end
function GameScene.create()
local scene = GameScene.new()
scene:addChild(scene:createAction())
return scene
end
function GameScene:createAction()
local layer = cc.Layer:create()
local bg = cc.Sprite:create("Background.png")
bg:setPosition(cc.p(size.width/2,
size.height/2))
layer:addChild(bg)
local function OnClickMenu(tag, menuItemSender)
cclog("tag = %d", tag)
actionFlag = menuItemSender:getTag()
local scene = require("ActionScene")
local nextScene = scene.create()
local ts = cc.TransitionJumpZoom:create(1, nextScene)
cc.Director:getInstance():pushScene(ts)
end
local pItmLabel1 = cc.Label:createWithBMFont("fonts/fnt2.fnt","Sequence")
local pItmMenu1 = cc.MenuItemLabel:create(pItmLabel1)
pItmMenu1:setTag(kSequence)
pItmMenu1:registerScriptTapHandler(OnClickMenu)
local pItmLabel2 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "Spawn")
local pItmMenu2 = cc.MenuItemLabel:create(pItmLabel2)
pItmMenu2:setTag(kSpawn)
pItmMenu2:registerScriptTapHandler(OnClickMenu)
local pItmLabel3 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "Repeate")
local pItmMenu3 = cc.MenuItemLabel:create(pItmLabel3)
pItmMenu3:setTag(kRepeate)
pItmMenu3:registerScriptTapHandler(OnClickMenu)
local pItmLabel4 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "RepeatForever")
local pItmMenu4 = cc.MenuItemLabel:create(pItmLabel4)
pItmMenu4:setTag(kRepeatForever1)
pItmMenu4:registerScriptTapHandler(OnClickMenu)
local pItmLabel5 = cc.Label:createWithBMFont("fonts/fnt2.fnt", "Reverse")
local pItmMenu5 = cc.MenuItemLabel:create(pItmLabel5)
pItmMenu5:setTag(kReverse)
pItmMenu5:registerScriptTapHandler(OnClickMenu)
local menu = cc.Menu:create(pItmMenu1,pItmMenu2,pItmMenu3,pItmMenu4,pItmMenu5)
menu:alignItemsVerticallyWithPadding(50)
layer:addChild(menu)
return layer
end
return GameScene
<pre name="code" class="cpp">require "Cocos2d"
require "Cocos2dConstants"
local size = cc.Director:getInstance():getWinSize()
local HIDE_TAG = true
local isPlaying = false
local plane
local ActionScene = class("ActionScene",function()
return cc.Scene:create()
end)
function ActionScene:ctor()
cclog("ActionScene init")
end
function ActionScene.create()
local scene = ActionScene.new()
scene:addChild(scene:createLayer())
return scene
end
function ActionScene:createLayer()
--顺序动作、组合动作、重复动作、永远重复动作和反向动作
cclog("ActionScene actionFlag = %d", actionFlag)
local layer = cc.Layer:create()
local bg = cc.Sprite:create("Background.png")
bg:setPosition(cc.p(size.width/2, size.height/2))
layer:addChild(bg)
plane = cc.Sprite:create("hero.png")
plane:setPosition(cc.p(size.width / 2, size.height / 2))
layer:addChild(plane)
local backMenuItem = cc.MenuItemImage:create("Back-up.png","Back-down.png")
backMenuItem:setPosition(cc.Director:getInstance():convertToGL(cc.p(140, 65)))
local goMenuItem = cc.MenuItemImage:create("Go-up.png","Go-down.png")
goMenuItem:setPosition(cc.Director:getInstance():convertToGL(cc.p(820, 540)))
local menu = cc.Menu:create(backMenuItem, goMenuItem)
menu:setPosition(cc.p(0, 0))
layer:addChild(menu)
local function backMenu(pSender)
cclog("ActionScene backMenu")
cc.Director:getInstance():popScene()
end
backMenuItem:registerScriptTapHandler(backMenu)
local function goMenu(pSender)
cclog("ActionScene goMenu")
if actionFlag == kSequence then
self:OnSequence(pSender)
elseif actionFlag == kSpawn then
self:OnSpawn(pSender)
elseif actionFlag == kRepeate then
self:OnRepeat(pSender)
elseif actionFlag == kRepeatForever1 then
self:OnRepeatForever(pSender)
elseif actionFlag == kReverse then
self:OnReverse(pSender)
end
end
goMenuItem:registerScriptTapHandler(goMenu)
return layer
end
function ActionScene:OnSequence(pSender)
cclog("ActionScene OnSequence")
local p = cc.p(size.width/2, 200)
local ac0 = cc.Place:create(p)
local ac1 = cc.MoveTo:create(2,cc.p(size.width - 130, size.height - 200))
local ac2 = cc.JumpBy:create(2, cc.p(8, 8),6, 3)
local ac3 = cc.Blink:create(2,3)
local ac4 = cc.TintBy:create(0.5,0,255,255)
plane:runAction(cc.Sequence:create(ac0, ac1, ac2, ac3, ac4, ac0))
end
function ActionScene:OnSpawn(pSender)
cclog("ActionScene OnSpawn")
local p = cc.p(size.width/2, 200)
plane:setRotation(0)
plane:setPosition(p)
local ac1 = cc.MoveTo:create(2,cc.p(size.width - 100, size.height - 100))
local ac2 = cc.RotateTo:create(2, 40)
plane:runAction(cc.Spawn:create(ac1,ac2))
end
function ActionScene:OnRepeat(pSender)
cclog("ActionScene OnRepeat")
local p = cc.p(size.width/2, 200)
plane:setRotation(0)
plane:setPosition(p)
local ac1 = cc.MoveTo:create(2,cc.p(size.width - 100, size.height - 100))
local ac2 = cc.JumpBy:create(2,cc.p(10, 10), 20,5)
local ac3 = cc.JumpBy:create(2,cc.p(-10, -10),20,3)
local seq = cc.Sequence:create(ac1, ac2, ac3)
plane:runAction(cc.Repeat:create(seq,3))
end
function ActionScene:OnRepeatForever(pSender)
cclog("ActionScene OnRepeatForever")
local p = cc.p(size.width/2, 500)
plane:setRotation(0)
plane:setPosition(p)
local bezier = {
cc.p(0, size.height / 2),
cc.p(10, - size.height / 2),
cc.p(10,20)
}
local ac1 = cc.BezierBy:create(2,bezier)
local ac2 = cc.TintBy:create(0.5, 0, 255, 255)
local ac1Reverse = ac1:reverse()
local ac2Repeat = cc.Repeat:create(ac2, 4)
local ac3 = cc.Spawn:create(ac1,ac2Repeat)
local ac4 = cc.Spawn:create(ac1Reverse,ac2Repeat)
local seq = cc.Sequence:create(ac3, ac4)
plane:runAction(cc.RepeatForever:create(seq))
end
function ActionScene:OnReverse(pSender)
cclog("ActionScene OnReverse")
local p = cc.p(size.width/2, 300)
plane:setRotation(0)
plane:setPosition(p)
local ac1 = cc.MoveBy:create(2,cc.p(40, 60))
local ac2 = ac1:reverse()
local seq = cc.Sequence:create(ac1, ac2)
plane:runAction(cc.Repeat:create(seq,2))
end
return ActionScene