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