开始这篇前,先复习一下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