用过Iphone的都知道,Iphone在定位光标位置的时候会把内容进行放大,这样我们就能很快的把光标移动到指定的位置。那么在我们的Cocos2dX的游戏中,怎么可以实现这种功能呢。起先我就是想起了Iphone自带的功能,但是这样的话,我们必须做个接口,然后有Iphone和Android两种实现才能完成。在Cocos2dx中,我们更希望的是能过写一套代码能够兼容两个系统,那么我们就要尽量使用Cocos2dx的代码。

  后面跟一些朋友讨论后,得出了一个解决方法。

  首先我们需要一个东西,能实现把你所要放大的东西按指定的形状进行显示,然后再把显示的内容进行放大。抱着这么一个理念,我们很容易想到了ClippingNode根据指定的模版对精灵进行截取。那么初步思路有了。但是,放大后我们要保证图片的位置不变,放大的区域是以放大镜的中心为锚点放大的,这就要求我们要获得每次放大镜位置改变后被放大物体的锚点,锚点改变后,相应的位置也得改变,才不会造成图像偏移。

  好,讲了这么多,大家都应该很好奇效果。那就上两张效果图吧。

      

  我们可以看到了熊猫位置的背景被放大了。

  下面我们看看代码怎么实现

  

    --这个不重要,就是示例用的快速创建的层和场景
local scene, layer = game:enterDemoScene()
--获取自己的层
local mainLayer = require("app.test.layer.MainLayer")
--移除测试层,添加自己的层
layer:remove()
layer = mainLayer.new():p(,):to(scene) --放大镜效果
--magnifier 放大镜图片
--parent 放大镜父亲节点
--point 放大镜的位置
--magnifierNode 被放大的精灵
function layer:magnifier(magnifierImage,parent,point,magnifierNode)
    --放大镜的模板,也是放大区域
    local magnifierRect = D.img(magnifierImage):p(point):to(parent,)
    if parent._mclip ~= nil then
      parent._mclip:removeFromParentAndCleanup(true)
      parent._mclip = nil
    end
    --创建ClippingNode,这里要将模板传进去
    parent._mclip = CCClippingNode:create(magnifierRect)
    parent._mclip:setInverted(false)
    parent._mclip:setAlphaThreshold()
    parent._mclip:setZOrder()
    parent:addChild(parent._mclip)     --添加放大镜照片,盖在放大镜区域上
    parent.magnifierNode = magnifierNode:anchor(D.BOTTOM_LEFT):p(,):to(layer._mclip)
    parent.magnifierNode:setScale(1.2)
    --真实的放大镜
    local magnifier = D.img(magnifierImage):p(point):to(parent,)
    --在放大镜上绑定点击功能
    magnifier:bindTouch()
    function magnifier:onTouchBegan(x,y,touches)
      return true
    end
    --移动的时候实时计算放大物件的锚点和位置,当然还有放大模板的位置
    function magnifier:onTouchMoved(x,y,touches)
      self:p(x,y)
      magnifierRect:p(x,y)
      local anchor1 = parent.magnifierNode:getAnchorPoint()
      --把锚点定位到要放大的位置
      parent.magnifierNode:setAnchorPoint(ccp(x/magnifierNode.width
,y/magnifierNode.height))
      local anchor2 = parent.magnifierNode:getAnchorPoint()
      parent.magnifierNode:p(ccp(parent.magnifierNode:px() + parent.magnifierNode:px()
* (anchor2.x - anchor1.x),
parent.magnifierNode:py()+ parent.magnifierNode:py()
*(anchor2.y - anchor1.y) ))
    end
    function magnifierRect:onTouchEnded(x,y,touches)     end
  end   --调用代码,要指定width和height,后面计算锚点用
  local magnifierNode = mainLayer.new();
  magnifierNode.width =
  magnifierNode.height=   
  layer:magnifier("panda/panda_1.png",layer,ccp(480,320),magnifierNode)

  以上是用ClippingNode实现放大镜效果的代码!

 

结语

  • 实现了放大镜功能,学会了ClippingNode使用

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士)

转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4495550.html

[COCOS2DX-LUA]0-001.利用ClippingNode实现放大镜功能的更多相关文章

  1. Cocos2d-x教程(26)-Cocos2d-x + Lua脚本实现大地图缩放功能

    欢迎增加 Cocos2d-x 交流群: 193411763 视频教程地址:http://www.tudou.com/programs/view/qRiOfppMghM/ 转载请注明原文出处:http: ...

  2. javascript 实现图片放大镜功能

    淘宝上经常用到的一个功能是利用图片的放大镜功能来查看商品的细节 下面我们来实现这样一个功能吧,原理很简单: 实现一个可以随鼠标移动的虚框 在另外一个块中对应显示虚框中的内容 实现思路: 虚框用css中 ...

  3. cocos2d-x 3.0 在C++中调用lua函数

    代码用的是<cocos2d-x 3.0 在lua中调用自定义类>中的代码. 在上篇的基础上进行扩充. 写lua函数 local function process_packet(user_d ...

  4. cocos2d-x 3.0 在lua中调用自定义类

    环境 windows8, cocos2d-x 3.0, 现在开始安装需要的一些其它包 1. 按README.mdown文档上面要求的, 下载在windows下要安装的东东, 主要就是python2.7 ...

  5. 8、Cocos2dx 3.0三,找一个小游戏开发3.0存储器管理的版本号

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27693365 复杂的内存管理 移动设备上的硬件资源十 ...

  6. 【cocos2d-x + Lua(1) 绑定Lua并使用tolua++】

    为什么要使用Lua进行游戏开发?转载请注明出处http://www.cnblogs.com/zisou/p/cocos2dx-lua1.html 上面一个问题我觉得在我们使用Lua之前需要深入思考的, ...

  7. cocos2d-x lua绑定解析

    花了几天时间看了下cocos2d-x lua绑定那块,总算是基本搞明白了,下面分三部分解析lua绑定: 一.lua绑定主要用到的底层函数 lua绑定其本质就是有一个公用的lua_Stack来进行C和L ...

  8. cocos2d-x + Lua接入iOS原生SDK的实现方案[转]

    相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我 ...

  9. Cocos2dx lua 3D实例代码

    用cocoside 创建一个项目 cocos2dx lua 项目即可 ,然后替换掉gamescene 就可以,具体效果还有函数的参数,相信大家一看就明白.简单说下ide 创建的 cocos lua 项 ...

随机推荐

  1. POJ 1176 Party Lamps&& USACO 2.2 派对灯(搜索)

    题目地址 http://poj.org/problem?id=1176 题目描述 在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码. 这些灯都 ...

  2. DP 60题 -2 HDU1025 Constructing Roads In JGShining's Kingdom

    Problem Description JGShining's kingdom consists of 2n(n is no more than 500,000) small cities which ...

  3. tar命令基本、进阶使用指北

    tar命令基本.进阶使用指北 摘要 打包与压缩是我们在计算机系统日常使用中必备的一个工具,就如我们在使用Windows系统,也需要类似WinRAR的压缩软件来将许多数据.文件打包成一个文件,并压缩其占 ...

  4. SVN 部署(基于 Linux)

    1.通过 yum 命令安装 svnserve,命令如下: # 此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行 yum -y install subversion # 若需查看 ...

  5. 一个简单的wed服务器SHTTPD(3)————SHTTPD多客户端支持的实现

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  6. 「从零单排HBase 09」Hbase的那些数据结构和算法

    在之前学习MySQL的时候,我们知道存储引擎常用的索引结构有B+树索引和哈希索引. 而对HBase的学习,也离不开索引结构的学习,它使用了一种LSM树((Log-Structured Merge-Tr ...

  7. dbcp数据源连接池

    一.数据源连接池 我们之前利用jdbc连接数据库,每次都要创建连接对象,销毁连接对象,如果并发访问量比较大,这样肯定比较辣 浪费数据库的效率,我们可以像之前mybatis中缓存查询到的数据一样,可以把 ...

  8. zigbee通用IO口小作业

    独立新建工程并编写.编译代码,实现按键控制流水灯运行,完成以下任务要求: [1]程序开始运行时,D4.D3.D6.D5灯全亮一会,然后全灭一会,开始进入流水灯. [2]流水灯的运行过程为:D4灯亮,其 ...

  9. gulp基本使用

    一.gulp是什么 gulp强调的是前端开发的工作流程,我们可以通过定义task事件定义事件的执行顺序,gulp去执行这些事件,构建整个前端开发的工作流程 gulp常见定义事件,例如: 变更静态资源 ...

  10. CodeForces-650B Image Preview 二分+模拟

    CodeForces-650B Image Preview 题意 手机里有n张图片,打开相机出现的是第一张,第一张右滑得到第n张,同理第n张左滑得到第1张,翻页耗费a秒,看照片耗费1s,但是照片有横屏 ...