cocos2d-Lua05体验引擎测试用例+定时任务+触摸事件

开始这篇前,先复习一下Node的功能:

   Node 
             坐标 
             锚点
             旋转
             缩放
             添加子节点
             计划任务
             运行动作
             生命周期
             绘图层次 
             标记Tag



万事开头难,先看看开元引擎带给我们的福利——测试用例。

使用方法:

1.创建一个CocosLua项目
2.拷贝D:\cocos2d-x-3.2\tests\cpp-tests\Resources 内容
 到项目的res目录
3.拷贝
 D:\cocos2d-x-3.2\tests\lua-tests\src 目录到项目的Src目录
4.修改项目目录下
 config.json
     "entry": "src/controller.lua",
  

5.refresh一下

6.运行:





PS:跟着大海老师学手游会少走很多弯路!!!


-------------》   定时任务  (一般不需要手动执行的动作,可用定时任务来做)《---------------


 一般来完成游戏逻辑

1。定义一个函数
 local funcation logic(t)
    游戏逻辑
 end
2。
  使用
  node:scheduleUpdateWithPriorityLua(logic,1)   --数值越小,优先级越高
-------------------------------------------
注意:每1/60秒执行一次(此为默认情况,另外还有30,15)


node一定是显示在当前屏幕


-----------处理屏幕触摸事件


--1定义事件回调函数
local function touchBegan(t,e)
        return true
end
local function touchMoved(t,e)
        end
local function touchEnded(t,e)
        print("touchEnded")
end

--2.定义事件侦听对象
local listener=cc.EventListenerTouchOneByOne:create()
    listener:registerScriptHandler(touchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
    listener:registerScriptHandler(touchMoved,cc.Handler.EVENT_TOUCH_MOVED)
    listener:registerScriptHandler(touchEnded,cc.Handler.EVENT_TOUCH_ENDED)
   --3.讲侦听器绑定事件源添加到事件分发器
   cc.Director:getInstance():getEventDispatcher()
     :addEventListenerWithSceneGraphPriority(listener,layer)



下面贴上场景跳转的源码:


MainScene.lua

--游戏主菜单
local MainScene=class("MainScene",function ()
return cc.Scene:create()
end)
function MainScene:create()
local ms=MainScene.new()
ms:addChild(ms:init())
return ms
end
function MainScene:ctor()
self.winsize=cc.Director:getInstance():getWinSize()
end
function MainScene:init()
local layer=cc.Layer:create()
--添加游戏名称
local labtitle=cc.Label:createWithSystemFont("刀塔传奇","",45)
labtitle:setPosition(self.winsize.width/2,self.winsize.height-80)
layer:addChild(labtitle)
--添加菜单
local itemStartGame=cc.MenuItemFont:create("开始游戏")
    local itemGameHelp=cc.MenuItemFont:create("游戏帮助")
    itemGameHelp:setPositionY(itemGameHelp:getPositionY()-50)
local menu=cc.Menu:create(itemStartGame,itemGameHelp)
layer:addChild(menu)
--添加菜单回调
itemStartGame:registerScriptTapHandler(function()
 local ms=require("MyScene")
 local mss=ms:create()
        local tmss=cc.TransitionFlipX:create(1,mss)--切换场景加特效
        cc.Director:getInstance():replaceScene(tmss)
end)
itemGameHelp:registerScriptTapHandler(function()
 local ts=require("TouchScene")
 local tss=ts:create()
 local ttss=cc.TransitionFlipX:create(1,tss)--切换场景加特效
        cc.Director:getInstance():replaceScene(ttss)
end)


return layer
end
return MainScene




MySecne.lua


--自定义场景
local MyScene=class("MyScene",function ()
return cc.Scene:create()
end)
function MyScene:create()
local ms=MyScene.new()
ms:addChild(ms:init())
return ms
end
function MyScene:ctor()
self.winsize=cc.Director:getInstance():getWinSize()
end
function MyScene:init()
    local layer=cc.Layer:create()
    --添加返回
    local itemback=cc.MenuItemFont:create("返回")
    itemback:setTag(9)
--添加一个英雄
local sp=cc.Sprite:create("hero01.png")
layer:addChild(sp)
sp:setPosition(self.winsize.width/2,self.winsize.height/2)
sp:setScale(0.1)
--让火女自动的从左向右移动
local count=1
local function logic01(t)
   count=count+1
   if count<30 then
     return
   end
   count=0
sp:setPositionX(sp:getPositionX()+2)
if sp:getPositionX()>self.winsize.width then --火女走出了屏幕
  sp:setPositionX(0) --再从屏幕的左侧出现
end
end
--执行logic
sp:scheduleUpdateWithPriorityLua(logic01,1)
--添加菜单
local itemStat=cc.MenuItemFont:create("开始")
    local itemStop=cc.MenuItemFont:create("停止")
    itemStat:setTag(10)--将当前的节点定义编号
    itemStop:setTag(11)
    local menu=cc.Menu:create(itemStat,itemStop,itemback)
    layer:addChild(menu)
    itemStat:setPositionY(itemStat:getPositionY()+130)
    itemStop:setPositionY(itemStop:getPositionY()+100)
    itemback:setPosition(-200,itemback:getPositionY()+130)
    --添加菜单的回掉函数
    local function menuclick(obj)
       if obj==11 then 
    sp:unscheduleUpdate()
       elseif obj==10 then
        sp:scheduleUpdateWithPriorityLua(logic01,1)
       elseif obj==9 then
        local ms=require("MainScene")
        local mss=ms:create()
        local tmss=cc.TransitionJumpZoom:create(1,mss)
            cc.Director:getInstance():replaceScene(tmss)
       end
    end
    itemStop:registerScriptTapHandler(menuclick)--让菜单绑定回调
    itemStat:registerScriptTapHandler(menuclick)
    itemback:registerScriptTapHandler(menuclick)
return layer
end
return MyScene




TouchScene.lua

--可以触摸交互的场景
local TouchScene=class("TouchScene",function ()
return cc.Scene:create()
end)
function TouchScene:create()
local ts=TouchScene.new()
ts:addChild(ts:init())
return ts
end
function TouchScene:ctor()
self.winsize=cc.Director:getInstance():getWinSize()
end
function TouchScene:init()
local layer=cc.Layer:create()
--添加人物层
local hero=cc.Sprite:create("stand06.png")
layer:addChild(hero)
hero:setPosition(self.winsize.width/2,self.winsize.height/2)
--处理触摸事件
--1定义事件回调函数
local function touchBegan(t,e)
        print("touchBegan")
       -- hero:setPosition(t:getLocation())
        hero:runAction(cc.MoveTo:create(0.5,t:getLocation()))
        return true
end
local function touchMoved(t,e)
        hero:setPosition(t:getLocation())
        print("touchMoved")
end
local function touchEnded(t,e)
        print("touchEnded")
end
--2.定义事件侦听对象
local listener=cc.EventListenerTouchOneByOne:create()
    listener:registerScriptHandler(touchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
    listener:registerScriptHandler(touchMoved,cc.Handler.EVENT_TOUCH_MOVED)
    listener:registerScriptHandler(touchEnded,cc.Handler.EVENT_TOUCH_ENDED)
   --3.讲侦听器绑定事件源添加到事件分发器
   cc.Director:getInstance():getEventDispatcher()
     :addEventListenerWithSceneGraphPriority(listener,layer)
return layer
end
return TouchScene

你可能感兴趣的:(游戏,面向对象,lua,cocos2d-lua)