cocos2dx 3.3 scrollView lua 版本幻灯片效果
来源:互联网 发布:淘宝收藏量有什么用 编辑:程序博客网 时间:2024/05/16 11:56
----- 需求
1.实现很多网站的图片左右循环滚动效果
2.当手移动到上面的时候,自动滑动暂停一段时间
3.当手在图片上移动一段距离的时候,图片跟随翻页(一次切一张图片)。
---- 思路
1. 利用 cocosstudio 拼好界面 生成csb 文件
2. 利用table 表固定好数据格式(可以 策划 excel 生成方便热更新)
3. scrollview 加载每张图片 ,启一个定时器没隔一段时间 scrollview 滑动一张图片的距离
4. 注意scrollview 的算法 (innerContanerSize().width - getContentSize().width) 滑动的总长度
5. 处理边缘情况
6. scrollview 注册点击事件并作相应的处理
第一次发表文章,小白献丑了。。。
轻喷,。。。欢迎大神指正。
local SlideDialog = class("SlideDialog",function ()<span style="white-space:pre"></span>return require("Dialog"):create()end)function SlideDialog:ctor()<span style="white-space:pre"></span>self._strName = "SlideDialog"<span style="white-space:pre"></span>self._pCloseButton = nil <span style="white-space:pre"></span>self._pCCS = nil <span style="white-space:pre"></span>self._pBg = nil<span style="white-space:pre"></span>self._pGoBtn = nil<span style="white-space:pre"></span>self._pImgPageView = nil <span style="white-space:pre"></span>self._pPageIndexImg = nil <span style="white-space:pre"></span>-----------------------------<span style="white-space:pre"></span>-- 当前选中的活动类型<span style="white-space:pre"></span>self._nCurActivityType = 0<span style="white-space:pre"></span>-- 代表页数的小点(页数)<span style="white-space:pre"></span>self._tPageIndexImgs = {}<span style="white-space:pre"></span>-- 自动翻页的定时器<span style="white-space:pre"></span>self._pSchedulerEntry = nil <span style="white-space:pre"></span>-- 当前页数<span style="white-space:pre"></span>self._curPageIndex = 1<span style="white-space:pre"></span>-- 每一页的宽度<span style="white-space:pre"></span>self._nRenderWidth = 500<span style="white-space:pre"></span>-- 点击之后延时<span style="white-space:pre"></span>self._nDelaySec = 0endfunction SlideDialog:create()<span style="white-space:pre"></span>local dialog = SlideDialog.new()<span style="white-space:pre"></span>dialog:dispose()<span style="white-space:pre"></span>return dialogendfunction SlideDialog:dispose()<span style="white-space:pre"></span>-- add plist <span style="white-space:pre"></span>ResPlistManager:getInstance():addSpriteFrames("AdvertiseMent.plist")<span style="white-space:pre"></span>ResPlistManager:getInstance():addSpriteFrames("AdvertiseMentPic.plist")<span style="white-space:pre"></span>local function onNodeEvent(event)<span style="white-space:pre"></span>if event == "cleanup" then <span style="white-space:pre"></span>self:onExitSlideDialog()<span style="white-space:pre"></span>end<span style="white-space:pre"></span>end <span style="white-space:pre"></span>self:registerScriptHandler(onNodeEvent) <span style="white-space:pre"></span>self:initUI() <span style="white-space:pre"></span>self:changePageIndex(1)endfunction SlideDialog:initUI()
<span style="white-space:pre"></span>-- 加载 cocostudio 生成的csb文件(单独写在一个脚本文件里面)<span style="white-space:pre"></span>local params = require("AdvertiseMentParams"):create()<span style="white-space:pre"></span>self._pCCS = params._pCCS<span style="white-space:pre"></span>self._pBg = params._pBackGround<span style="white-space:pre"></span>self._pCloseButton = params._pCloseButton<span style="white-space:pre"></span>self._pImgPageView = params._pPictureQ<span style="white-space:pre"></span>self._pGoBtn = params._pOkButton<span style="white-space:pre"></span>self._pPageIndexImg = params._pNowButton<span style="white-space:pre"></span>self._tPageIndexImgs[1] = self._pPageIndexImg<span style="white-space:pre"></span>self:disposeCSB()<span style="white-space:pre"></span>-- 加载广告图片<span style="white-space:pre"></span>self._pageNum = #TableAdvertiseMent<span style="white-space:pre"></span>local s = self._pImgPageView:getInnerContainerSize()<span style="white-space:pre"></span>local contentWidth = 0
<span style="font-size: 14px; white-space: pre;"></span><span style="font-size: 14px;">-- </span><span style="font-family: 'Microsoft YaHei';"><span style="font-size:10px;">TableAdvertiseMent 本地的lua 表 定义图片对应的信息方便热更新</span></span><span style="font-size: 14px;"></span><span style="font-size: 14px;"></span><span style="font-size: 14px; white-space: pre;"></span><span style="font-size: 14px;">for i,advertiseInfo in ipairs(TableAdvertiseMent) do</span><span style="font-size: 14px; white-space: pre;"></span><span style="font-size: 14px;">local adImg = cc.Sprite:createWithSpriteFrameName("AdvertiseMentPic/"..advertiseInfo.ResourcesName..".png")</span><span style="font-size: 14px; white-space: pre;"></span><span style="font-size: 14px;">contentWidth = contentWidth + self._nRenderWidth </span><span style="font-size: 14px; white-space: pre;"></span><span style="font-size: 14px;">adImg:setAnchorPoint(cc.p(1, 0.5))</span><span style="font-size: 14px; white-space: pre;"></span><span style="font-size: 14px;">adImg:setPosition(cc.p(contentWidth,s.height/2))</span><span style="font-size: 14px; white-space: pre;"></span><span style="font-size: 14px;">self._pImgPageView:addChild(adImg)</span><span style="font-size: 14px; white-space: pre;"></span><span style="font-size: 14px;">end<span style="white-space:pre"></span>if contentWidth > s.width then <span style="white-space:pre"></span>self._pImgPageView:setInnerContainerSize(cc.size(contentWidth,s.height))<span style="white-space:pre"></span>end<span style="white-space:pre"></span>s = self._pImgPageView:getInnerContainerSize() <span style="white-space:pre"></span>local gapX = self._pPageIndexImg:getContentSize().width <span style="white-space:pre"></span>-- 加载对应按钮 <span style="white-space:pre"></span>for i = 1, #TableAdvertiseMent do <span style="white-space:pre"></span>if i == 1 then <span style="white-space:pre"></span>self._tPageIndexImgs[1]:setVisible(true) <span style="white-space:pre"></span>end <span style="white-space:pre"></span>self._tPageIndexImgs[i] = self._pPageIndexImg:clone() <span style="white-space:pre"></span>self._tPageIndexImgs[i]:setPositionX(self._tPageIndexImgs[i]:getPositionX() + gapX *( i - 1)) <span style="white-space:pre"></span>self._pBg:addChild(self._tPageIndexImgs[i]) <span style="white-space:pre"></span>end <span style="white-space:pre"></span>-- 幻灯片特效 <span style="white-space:pre"></span>local function slideAni () <span style="white-space:pre"></span>if self._nDelaySec > 0 then <span style="white-space:pre"></span>self._nDelaySec = self._nDelaySec - 1 <span style="white-space:pre"></span>return <span style="white-space:pre"></span>end <span style="white-space:pre"></span>self:changePageIndex(self._curPageIndex + 1) <span style="white-space:pre"></span> end <span style="white-space:pre"></span>self._pSchedulerEntry = cc.Director:getInstance():getScheduler():scheduleScriptFunc(slideAni,1.0,false) <span style="white-space:pre"></span>self:initTouchEvent()endfunction SlideDialog:changePageIndex(index) if index == self._pageNum + 1 then self._pImgPageView:jumpToLeft() self._tPageIndexImgs[1]:loadTexture("AdvertiseMentRes/Button002.png",ccui.TextureResType.plistType) self._tPageIndexImgs[self._pageNum]:loadTexture("AdvertiseMentRes/button001.png",ccui.TextureResType.plistType) self._curPageIndex = 1 return else</span>
<span style="font-size: 14px;"> -- 此处写的时候比较纠结 scrollview 的滑动算法看一下源码就知道了 local percent = (index - 1) / (self._pageNum - 1) self._pImgPageView:scrollToPercentHorizontal(math.floor(percent * 100),0.5,false) self._curPageIndex = index end for i,v in ipairs(self._tPageIndexImgs) do local imgName = "AdvertiseMentRes/button001.png" if i == index then imgName = "AdvertiseMentRes/Button002.png" end v:loadTexture(imgName,ccui.TextureResType.plistType) endendfunction SlideDialog:initTouchEvent() -- 触摸注册 local function onTouchBegin(touch,event) --local location = touch:getLocation() self._nDelaySec = 3 return true end local function onTouchMoved(touch,event) <span style="white-space:pre"></span>self._nDelaySec = 3 end local function onTouchEnded(touch,event) self._nDelaySec = 3 local startLocationX = touch:getStartLocation().x local locationX = touch:getLocation().x if math.abs(locationX - startLocationX) >= 100 then if locationX - startLocationX < 0 then --表示向左滑动 if self._curPageIndex ~= self._pageNum then self._curPageIndex = self._curPageIndex + 1 else self._curPageIndex = 1 end else if self._curPageIndex == 1 then self._curPageIndex = self._pageNum else self._curPageIndex = self._curPageIndex - 1 end end self:changePageIndex(self._curPageIndex) end end local function onTouchCancelled(touch,event) <span style="white-space:pre"></span>self._nDelaySec = 3 end -- 添加监听器 self._pTouchListener = cc.EventListenerTouchOneByOne:create() self._pTouchListener:setSwallowTouches(true) self._pTouchListener:registerScriptHandler(onTouchBegin,cc.Handler.EVENT_TOUCH_BEGAN ) self._pTouchListener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED ) self._pTouchListener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED ) self._pTouchListener:registerScriptHandler(onTouchCancelled,cc.Handler.EVENT_TOUCH_CANCELLED ) self:getEventDispatcher():addEventListenerWithSceneGraphPriority(self._pTouchListener, self._pImgPageView)endfunction SlideDialog:onExitSlideDialog() self:onExitDialog() if self._pSchedulerEntry ~= nil then cc.Director:getInstance():getScheduler():unscheduleScriptEntry(self._pSchedulerEntry ) self._pSchedulerEntry = nil end ResPlistManager:getInstance():removeSpriteFrames("AdvertiseMent.plist") ResPlistManager:getInstance():removeSpriteFrames("AdvertiseMentPic.plist") endreturn SlideDialogTableAdvertiseMent{ { ID = 1.0, ResourcesName = 'advertisement01', ActivityType = 1.0, }, { ID = 2.0, ResourcesName = 'advertisement02', ActivityType = 2.0, }, { ID = 3.0, ResourcesName = 'advertisement03', ActivityType = 3.0, },}</span>
0 0
- cocos2dx 3.3 scrollView lua 版本幻灯片效果
- 【cocos2dx 3.3 lua】05 环绕倒计时效果
- 【cocos2dx 3.3 lua】06 抽奖转盘效果
- cocos2dx-lua ScrollView的第一次编写
- 如何实现字幕效果,cocos2dx ,Lua
- 如何实现字幕效果,cocos2dx ,Lua
- Cocos2dx(3.3)绑定lua
- 【cocos2dx 3.3 lua】04 纸牌翻转效果--类似QQ斗地主癞子效果
- cocos2dx lua版本让图片变灰
- cocos2dx Lua 版本中无法调用setLastFrameCallFunc
- Cocos2dx lua 3.10版本绑定cjson流程
- 幻灯片效果
- 幻灯片效果
- 只为菜鸟 cocos2dx-lua 实现Scrollview (vs2013)
- cocos2dx 3.1 cpp版本转lua版本 mac
- Cocos2dx 小技巧(十四)ScrollView实现缩放效果
- Cocos2dx 小技巧(十四)ScrollView实现缩放效果
- Cocos2dx 小技巧(十四)ScrollView实现缩放效果
- Codeforces Round #316 (Div. 2)570A Elections(模拟)
- Codeforces Round #316 (Div. 2)
- Codeforces Round #316 (Div. 2) C. Replacement 找规律 或 线段树
- Codeforces Round #316 (Div. 2)570B Simple Game(脑洞)
- Codeforces Round #316 (Div. 2)-C. Replacement
- cocos2dx 3.3 scrollView lua 版本幻灯片效果
- Codeforces Round #316 (Div. 2) -B-Simple Game-水题
- Codeforces Round #316 (Div. 2)-A. Elections-模拟水题22
- 算法题:科学计数法
- ds18b20驱动第四天
- coredata VS sqlist
- LeetCode Roman to Integer
- kindeditor远程图片没问题,上传本地图片报:上传目录不存在
- 菜鸟学前端之遍寻名师