• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Cocos2d-lua 滑动选关效果

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

昨天看到前面的大佬在做这种效果,特意去请教了一下,刚开始以为是用PageView或者ListView做的,原来是用最普通的触摸来实现的。

感觉自己应该多思考多学习,不会的地方还是太多了,有些东西其实没有自己想的那么复杂,能用一些基本元素实现来实现的东西,自己有时候却总是觉得是不是哪里不会哪里不懂,也可能是自己的经验不够。

效果如下


布局思路如下



代码如下(不是完整代码 仅针对此效果)

--[[
Author : CaiEnHao
Data : 2018.3.7
--]]


local layer = cc.Layer:create()
self:addChild(layer,100)


local isTouchable = true


local lat = ccui.Layout:create()
lat:setContentSize(display.size)
lat:setTouchEnabled(true)
self:addChild(lat)


local pos_1 = cc.p(display.width * 0.2,display.height * 0.5)
local pos_2 = cc.p(display.width * 0.5,display.height * 0.5)
local pos_3 = cc.p(display.width * 0.8,display.height * 0.5)


-- 三张图片
local sp_1 = ccui.ImageView:create("btn-a-0.png")
sp_1.index = 1
sp_1.name = "紫色球"
sp_1:setTouchEnabled(true)
sp_1:setPosition(pos_1)
lat:addChild(sp_1)


local sp_2 = ccui.ImageView:create("HelloWorld.png")
sp_2:setScale(1.5)
sp_2.index = 2
sp_2.name = "你好世界"
sp_1:setTouchEnabled(true)
sp_2:setPosition(pos_2)
lat:addChild(sp_2)


local sp_3 = ccui.ImageView:create("jianglilizi.png")
sp_3.index = 3
sp_3.name = "闪光"
sp_1:setTouchEnabled(true)
sp_3:setPosition(pos_3)
lat:addChild(sp_3)


-- 三张图片加入表
self.sp_Tbl = {}
table.insert(self.sp_Tbl,sp_1)
table.insert(self.sp_Tbl,sp_2)
table.insert(self.sp_Tbl,sp_3)


-- layer触摸监听
local beginPos = nil
local endPos = nil
local function onTouchBegan(touch,event)
if isTouchable == false then
return false
end
beginPos = touch:getLocation()
return true
end
local function onTouchMoved(touch,event)


end
local function onTouchEnded(touch,event)
endPos = touch:getLocation()


-- 如果发生了滑动
if((beginPos.x - endPos.x) ~= 0) then
-- 禁止触摸
isTouchable = false
-- 1秒后恢复触摸
local function reviveTouch()
isTouchable = true
end
local seq = cc.Sequence:create(cc.DelayTime:create(1.0),cc.CallFunc:create(reviveTouch))
self:runAction(seq)
end


-- 往左滑
if((beginPos.x - endPos.x) > 0) then
-- 关卡移动
for i,v in pairs(self.sp_Tbl) do
if v.index == 1 then
v:setLocalZOrder(0) -- setZOrder在最新版本不推荐使用了 使用后控制台有warning
v:runAction(cc.MoveTo:create(0.5,pos_3))
end


if v.index == 2 then
v:setLocalZOrder(1)
local move = cc.MoveTo:create(0.5,pos_1)
local scale = cc.ScaleTo:create(0.5,1.0)
local spawn = cc.Spawn:create(move,scale)
v:runAction(spawn)
end


if v.index == 3 then
v:setLocalZOrder(3)
local move = cc.MoveTo:create(0.5,pos_2)
local scale = cc.ScaleTo:create(0.5,1.5)
local spawn = cc.Spawn:create(move,scale)
v:runAction(spawn)
end
end


-- 更新当前索引
for i,v in pairs(self.sp_Tbl) do
if v.index == 1 then
v.index = 3
elseif v.index == 2 then
v.index = 1
elseif v.index == 3 then
v.index = 2
end
end
-- 向右滑
elseif((beginPos.x - endPos.x) < 0) then
-- 关卡移动
for i,v in pairs(self.sp_Tbl) do
if v.index == 1 then
v:setLocalZOrder(3)
local move = cc.MoveTo:create(0.5,pos_2)
local scale = cc.ScaleTo:create(0.5,1.5)
local spawn = cc.Spawn:create(move,scale)
v:runAction(spawn)
end


if v.index == 2 then
v:setLocalZOrder(2)
local move = cc.MoveTo:create(0.5,pos_3)
local scale = cc.ScaleTo:create(0.5,1.0)
local spawn = cc.Spawn:create(move,scale)
v:runAction(spawn)
end


if v.index == 3 then
v:setLocalZOrder(0)
v:runAction(cc.MoveTo:create(0.5,pos_1))
end
end


-- 更新当前索引
for i,v in pairs(self.sp_Tbl) do
if v.index == 1 then
v.index = 2
elseif v.index == 2 then
v.index = 3
elseif v.index == 3 then
v.index = 1
end
end
end


-- 输出所有关卡各种属性 确认调换后的属性无误
for i,v in pairs(self.sp_Tbl) do
print("从左往右第"..v.index.."个关卡","name:"..v.name)
end
end


local listenner = cc.EventListenerTouchOneByOne:create()  
listenner:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )  
listenner:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )   
listenner:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
local eventDispatcher = self:getEventDispatcher()    
eventDispatcher:addEventListenerWithSceneGraphPriority(listenner, layer)  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua cocos 中对FNT字体的使用发布时间:2022-07-22
下一篇:
lua在线手册汇总发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap