Cocos2d lua 滑動選關效果

2021-08-16 07:37:13 字數 4956 閱讀 3244

昨天看到前面的大佬在做這種效果,特意去請教了一下,剛開始以為是用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

endbeginpos = touch:getlocation()

return true

endlocal function ontouchmoved(touch,event)

endlocal function ontouchended(touch,event)

endpos = touch:getlocation()

-- 如果發生了滑動

if((beginpos.x - endpos.x) ~= 0) then

-- 禁止觸控

istouchable = false

-- 1秒後恢復觸控

local function revivetouch()

istouchable = true

endlocal 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))

endif 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)

endif 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)

endend

-- 更新當前索引

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

endend

-- 向右滑

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)

endif 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)

endif v.index == 3 then

v:setlocalzorder(0)

v:runaction(cc.moveto:create(0.5,pos_1))

endend

-- 更新當前索引

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

endend

end-- 輸出所有關卡各種屬性 確認調換後的屬性無誤

for i,v in pairs(self.sp_tbl) do

print("從左往右第"..v.index.."個關卡","name:"..v.name)

endend

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)  

Cocos2d Lua之隨機數

不管是什麼語言,所生成的隨機數都是偽隨機數,是根據一定的計算法則求出來的。lua語言是利用兩個函式來生成隨機數 math.randomseed 值 提供種子值 math.random val1,val2 隨機生成乙個在val1和val2之間的隨機數,若全部預設,則預設生成0 1之間的隨機數,若只有乙...

Cocos2d lua 初識shader之一 置灰

shader譯名為著色器,通俗來說,shader告訴電腦如何使用一種特殊的方式繪製物體。shader分為三種 頂點著色器 片段著色器 幾何著色器。頂點shader 3d圖形都是由乙個乙個三角形組 成的,頂點shader就是計算頂點位置,並為後期畫素渲染做準備的 片段shader 是以畫素為單位,計算...

Cocos2d lua 初識shader之三 模糊

原理 遍歷當前畫素點周圍的部分畫素點,累加它們的rgba,根據距離設定權重並相乘,最後再根據總權重獲取該總和的平均值,將該平均值設定為當前畫素點的顏色。local vert attribute vec4 a position attribute vec2 a texcoord attribute v...