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"
--操作标识
actionFlag = -1
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 animateLabel = cc.Label:createWithBMFont("fonts/fnt2.fnt","Animate")
local animateMenuItem = cc.MenuItemLabel:create(animateLabel)
animateMenuItem:setTag(kFlipX3D)
animateMenuItem:registerScriptTapHandler(OnClickMenu)
local menu = cc.Menu:create(
animateMenuItem
)
menu:alignItemsVertically()
layer:addChild(menu)
return layer
end
return GameScene
require "Cocos2d"
require "Cocos2dConstants"
local size = cc.Director:getInstance():getWinSize()
local isPlaying = false
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()
local layer = cc.Layer:create()
cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("run.plist")
local bg = cc.Sprite:createWithSpriteFrameName("background.png")
bg:setPosition(cc.p(size.width/2.0, size.height/2.0))
layer:addChild(bg)
local sprite = cc.Sprite:createWithSpriteFrameName("h1.png")
sprite:setPosition(cc.p(size.width/2.0, size.height/2.0))
layer:addChild(sprite)
local goSprite = cc.Sprite:createWithSpriteFrameName("go.png")
local goToggleMenuItem = cc.MenuItemSprite:create(goSprite, goSprite)
local stopSprite = cc.Sprite:createWithSpriteFrameName("stop.png")
local stopToggleMenuItem = cc.MenuItemSprite:create(stopSprite, stopSprite)
local toggleMenuItem = cc.MenuItemToggle:create(goToggleMenuItem, stopToggleMenuItem)
toggleMenuItem:setPosition(cc.p(800, 540))
local menu = cc.Menu:create(toggleMenuItem)
menu:setPosition(cc.p(0, 0))
layer:addChild(menu)
local function OnAction(sender)
if not isPlaying then
--///////////////////////动画开始////////////////////////////
local animation = cc.Animation:create()
animation:setDelayPerUnit(0.15)
animation:setRestoreOriginalFrame(true)
for i=1,4 do
local frameName = string.format("h%d.png", i)
cclog("frameName:%s", frameName)
local spriteFrame = cc.SpriteFrameCache:getInstance():getSpriteFrameByName(frameName)
animation:addSpriteFrame(spriteFrame)
end
local animate = cc.Animate:create(animation)
sprite:runAction(cc.RepeatForever:create(animate))
isPlaying = true
else
sprite:stopAllActions()
isPlaying = false
end
end
toggleMenuItem:registerScriptTapHandler(OnAction)
return layer
end
return ActionScene