[COCOS2DX-LUA]0-001.利用ClippingNode实现放大镜功能
用过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实现放大镜功能的更多相关文章
- Cocos2d-x教程(26)-Cocos2d-x + Lua脚本实现大地图缩放功能
欢迎增加 Cocos2d-x 交流群: 193411763 视频教程地址:http://www.tudou.com/programs/view/qRiOfppMghM/ 转载请注明原文出处:http: ...
- javascript 实现图片放大镜功能
淘宝上经常用到的一个功能是利用图片的放大镜功能来查看商品的细节 下面我们来实现这样一个功能吧,原理很简单: 实现一个可以随鼠标移动的虚框 在另外一个块中对应显示虚框中的内容 实现思路: 虚框用css中 ...
- cocos2d-x 3.0 在C++中调用lua函数
代码用的是<cocos2d-x 3.0 在lua中调用自定义类>中的代码. 在上篇的基础上进行扩充. 写lua函数 local function process_packet(user_d ...
- cocos2d-x 3.0 在lua中调用自定义类
环境 windows8, cocos2d-x 3.0, 现在开始安装需要的一些其它包 1. 按README.mdown文档上面要求的, 下载在windows下要安装的东东, 主要就是python2.7 ...
- 8、Cocos2dx 3.0三,找一个小游戏开发3.0存储器管理的版本号
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27693365 复杂的内存管理 移动设备上的硬件资源十 ...
- 【cocos2d-x + Lua(1) 绑定Lua并使用tolua++】
为什么要使用Lua进行游戏开发?转载请注明出处http://www.cnblogs.com/zisou/p/cocos2dx-lua1.html 上面一个问题我觉得在我们使用Lua之前需要深入思考的, ...
- cocos2d-x lua绑定解析
花了几天时间看了下cocos2d-x lua绑定那块,总算是基本搞明白了,下面分三部分解析lua绑定: 一.lua绑定主要用到的底层函数 lua绑定其本质就是有一个公用的lua_Stack来进行C和L ...
- cocos2d-x + Lua接入iOS原生SDK的实现方案[转]
相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我 ...
- Cocos2dx lua 3D实例代码
用cocoside 创建一个项目 cocos2dx lua 项目即可 ,然后替换掉gamescene 就可以,具体效果还有函数的参数,相信大家一看就明白.简单说下ide 创建的 cocos lua 项 ...
随机推荐
- Codeforce 263D Cycle in Graph 搜索 图论 哈密尔顿环
You've got a undirected graph G, consisting of n nodes. We will consider the nodes of the graph inde ...
- CF #632 (Div. 2) 对应题号CF1333
1333A Little Artem 在一个\(n\)行\(m\)列的格子上染色,每个格子能染黑白两种 构造一种方案,使得四个方向有至少一个白色格子的黑色格子的数量,比四个方向有至少一个黑色格子的白色 ...
- 跟哥一起学python(2)- 运行第一个python程序&环境搭建
本节的任务,是完成我们的第一个python程序,并搭建好学习python的环境. 建议通过视频来学习本节内容: 查看本节视频 再次看看上一节提到的那张图,看看作为高级编程语言,我们如何编程. 首先, ...
- JVM之类加载器、加载过程及双亲委派机制
JVM 的生命周期 虚拟机的启动 Java 虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实 ...
- abp(net core)+easyui+efcore实现仓储管理系统——入库管理之十一(四十七)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- 前端——Vue CLI 3.x搭建Vue项目
一.Node安装 windows 1. Node.js (>=8.9, 推荐8.11.0+) Node官网下载 .msi 文件,按步骤下载安装即可. 安装完之后在cmd中输入 node -v,若 ...
- 读CSV文件并写arcgis shp文件
一.在这里我用到的csv文件是包含x,y坐标及高程.降雨量数据的文件.如下图所示. 二.SF简介 简单要素模型(Simple Feature,SF),是 OGC 国际组织定义的面向对象的矢量数据模型. ...
- 【Hadoop离线基础总结】完全分布式环境搭建
完全分布式环境搭建 服务规划 适用于工作当中正式环境搭建 安装步骤 第一步:安装包解压 停止之前的Hadoop集群的所有服务,并删除所有机器的Hadoop安装包,然后重新解压Hadoop压缩包 三台机 ...
- STM32 时钟树配置快速入门
layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 为什么要了解时钟树? ...
- 1018 Public Bike Management (30分) 思路分析 + 满分代码
题目 There is a public bike service in Hangzhou City which provides great convenience to the tourists ...