问题需求:
- cocos平行四边形的ScrollView
解决办法:
- 先旋转ScrollView一个角度iSlop
- 调整内部显示的cell位置与旋转角度-iSlop
local iSlop = 5 -- 倾斜角度
self.m_pScroll = ccui.ScrollView:create()
self.m_pScroll:setRotation(iSlop)
self.m_pContent = cc.Layer:create()
self.m_pScroll:setInnerContainerSize(cc.size(600, 3000))
self.m_pScroll:addChild(self.m_pContent)
self.m_pScroll:setContentSize(cc.size(800, 570))
self.m_pScroll:setDirection(ccui.ScrollViewDir.vertical)
self.m_pScroll:setPosition(Tool:ConvertPTCentor(cc.p(-290,-250)))
self.m_pScroll:setScrollBarEnabled(false)
self.m_pScroll:addEventListenerScrollView(function(sender, eventType)
self:OnTouchListView(sender, eventType)
end)
-- 平行四边形遮罩
local pDrewNode = cc.DrawNode:create()
pDrewNode:drawPolygon({cc.p(340, 110), cc.p(1130, 110), cc.p(1170, 590), cc.p(380, 590)}, 4, cc.c4f(255,255,255,255), 1, cc.c4f(255,255,255,255))
self.clipNode = cc.ClippingNode:create()
self.clipNode:setStencil(pDrewNode)
self:addChild(self.clipNode)
self.clipNode:addChild(self.m_pScroll)
local iDisx = 260 -- cell间距
local iDisy = 360
for i=0, #GameHall_Role.RoleType*10 do
local pBtn = 创建Cell
if pBtn then
local idx = math.floor(i/3)
pBtn:setRotation(-iSlop)
local iPosx = (i%3)*iDisx*math.cos(iSlop*(math.pi/180)) + 130
local iPosy = (i%3)*iDisx*math.sin(iSlop*(math.pi/180)) + idx*iDisy + 200
self.m_pContent:addChild(pBtn)
end
end