require "Cocos2d"
require "Cocos2dConstants"
-- cclog
cclog = function(...)
print(string.format(...))
end
function __G__TRACKBACK__(msg)
cclog("----------------------------------------")
cclog("LUA ERROR: " .. tostring(msg) .. "\n")
cclog(debug.traceback())
cclog("----------------------------------------")
return msg
end
local function main()
collectgarbage("collect")
-- avoid memory leak
collectgarbage("setpause", 100)
collectgarbage("setstepmul", 5000)
cc.FileUtils:getInstance():addSearchPath("src")
cc.FileUtils:getInstance():addSearchPath("res")
cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(960, 640, 0)
--create scene
local scene = require("GameScene")
local gameScene = scene.create()
if cc.Director:getInstance():getRunningScene() then
cc.Director:getInstance():replaceScene(gameScene)
else
cc.Director:getInstance():runWithScene(gameScene)
end
end
local status, msg = xpcall(main, __G__TRACKBACK__)
if not status then
error(msg)
end
require "Cocos2d"
require "Cocos2dConstants"
require("AudioEngine")
EFFECT_FILE = "sound/Blip.wav"
MUSIC_FILE = "sound/Jazz.mp3"
isEffect = false
local size = cc.Director:getInstance():getVisibleSize()
local GameScene = class("GameScene",function()
local scene = cc.Scene:create()
return scene
end)
function GameScene.create()
local scene = GameScene.new()
scene:addChild(scene:createLayer())
return scene
end
function GameScene:ctor()
end
function GameScene.createLayer()
local layer = cc.Layer:create()
--注册事件函数
--registerScriptTouchHandler 注册触屏事件
--registerScriptTapHandler 注册点击事件
--registerScriptHandler 注册节点事件
--只能获取触摸事件类型和触摸坐标,不能进行触摸对象区域判断,使用的比较少
local function onTouchEvent(event, x, y)
if event == "began" then
cclog("began")
return true
elseif event == "moved" then
cclog("moved")
elseif event == "ended" then
cclog("ended")
end
end
layer:setTouchEnabled(true)
layer:registerScriptTouchHandler(onTouchEvent)
--点击事件,比如菜单项点击或者按钮点击
local menuItem = cc.MenuItemImage:create("CloseNormal.png", "CloseSelected.png")
menuItem:setPosition(cc.p(320,160))
local function menuItemCallback(sender)
cclog("menuItemCallback")
end
menuItem:registerScriptTapHandler(menuItemCallback)
local menu = cc.Menu:create(menuItem)
menu:setPosition(cc.p(0,0))
layer:addChild(menu)
--节点事件,比如场景之间切换的onEnter或者onExit
local function onNodeEvent(event)
if event == "enter" then
cclog("enter")
elseif event == "exit" then
cclog("exit")
end
end
layer:registerScriptHandler(onNodeEvent)
--监听器注册事件,监听器最终也是调用registerScriptHandler进行注册,使用监听器可以注册触屏事件(包括单点触摸和多点触摸)、键盘事件、重力加速计事件,使用的比较多
--触屏事件
local function onTouchBegan(touch, event)
cclog("onTouchBegan")
return true
end
local function onTouchMoved(touch, event)
cclog("onTouchMoved")
end
local function onTouchEnded(touch, event)
cclog("onTouchEnded")
end
local listenerTouch = cc.EventListenerTouchOneByOne:create()
listenerTouch:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
listenerTouch:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED)
listenerTouch:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED)
layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listenerTouch,layer)
--键盘事件
local function onKeyboard(keyCode, event)
cclog("keyCode:"..keyCode)
end
local listenerKeyboard = cc.EventListenerKeyboard:create()
listenerKeyboard:registerScriptHandler(onKeyboard,cc.Handler.EVENT_KEYBOARD_PRESSED)
listenerKeyboard:registerScriptHandler(onKeyboard,cc.Handler.EVENT_KEYBOARD_RELEASED)
layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listenerKeyboard,layer)
--重力加速计事件
local function accelerometerListener(event,x,y,z,timestamp)
cclog("{x = %f, y = %f}", x, y)
end
local listernerAccelerometer = cc.EventListenerAcceleration:create(accelerometerListener)
layer:getEventDispatcher():addEventListenerWithSceneGraphPriority(listernerAccelerometer,layer)
return layer
end
return GameScene