quick-cocos2d-x游戏开发【6】——制作您自己的自定义效果button菜单
前面提到的主菜单使用,还是很easy的,但我们在商业产品。经常看到button他们人很好,照片不仅就好了,和动画也很不错。Candy Crash都玩过吧,他们看到,button。真的像果冻,效果确实非常值得称赞。因此,我们必须要。这当然不敢大意,后有一个抖动的效果。像这样。

好了,開始做个吧,我这个也是搬了一下coinflip中的button代码,算是学习一下。
创建一个views目录。里面创建一个MyButton.lua文件。这个就是我们的自己定义button类了。实现的原理比較简单,在ui.newImageMenuItem的table參数中。有图片,回调函数等參数。所以我们的做法就是在传入这些參数之后。我们在内部改动一些东西就能够了。等于quick给图片button封装了一次,我们自己再封装一下。
local MyButton = {}
function MyButton.new(params)
local button = nil
button = ui.newImageMenuItem(params)
return button
end
return MyButton
这就封装了一下quick中的ui.newImageMenuItem,以下做的就是把params的參数捕获,处理我们的效果之后再传给ui.newImageMenuItem中的參数。
function MyButton.new(params)
local button = nil
local listener = params.listener params.listener = function (tag)
--do things
listener(tag) end button = ui.newImageMenuItem(params)
return button end
上面这段代码中。我们将传入的回调函数先用listener变量保存起来。然后在listener參数中处理一些事情,最后记得在里面调用之前传入的回调函数就可以。所以如今还没加入效果代码,为了后面大家能看得更清楚些。
接下来,我们就来加入一下之前展示的效果了。
params.listener = function (tag)
local function zoom1(offset, time, onComplete)
local x, y = button:getPosition()
local size = button:getContentSize() local scaleX = button:getScaleX() * (size.width + offset) / size.width
local scaleY = button:getScaleY() * (size.height - offset) / size.height transition.moveTo(button, {y = y - offset, time = time})
transition.scaleTo(button, {
scaleX = scaleX,
scaleY = scaleY,
time = time,
onComplete = onComplete,
})
end local function zoom2(offset, time, onComplete)
local x, y = button:getPosition()
local size = button:getContentSize() transition.moveTo(button, {y = y + offset, time = time / 2})
transition.scaleTo(button, {
scaleX = 1.0,
scaleY = 1.0,
time = time,
onComplete = onComplete,
})
end button:getParent():setEnabled(false) --先关闭父类menu的功能 zoom1(40, 0.08, function()
zoom2(40, 0.09, function()
zoom1(20, 0.10, function()
zoom2(20, 0.11, function()
button:getParent():setEnabled(true)
listener(tag)
end)
end)
end)
end)
end
zoom1和zoom2是两个效果函数。主要是move和scale两个动作,在做效果之前。首先关闭父类的menu功能,这样防止在这个menu item还没做完动作又被玩家点上别的button上了,运行一系列的缩放效果之后,再开启menu功能,最后运行之前的回调函数,这样一个动画button就新奇出炉了。
赶紧放到menu中測试一下,
local Button = import("..views.MyButton") --导入Button
local MyScene = class("MyScene", function ()
return display.newScene("myscene")
end)
function MyScene:ctor()
local button = Button.new({
image = "icon.png",
listener = function ()
print("click")
end,
x = display.cx,
y = display.cy
})
local menu = ui.newMenu({button})
self:addChild(menu)
end
return MyScene
这使得有可能加入向上,也可以和quick其他套餐button一起menu管家。
好,每个人都可以将自己喜爱的效果。
quick-cocos2d-x游戏开发【6】——制作您自己的自定义效果button菜单的更多相关文章
- iOS cocos2d 2游戏开发实战(第3版)书评
2013是游戏爆发的一年,手游用户也是飞速暴增.虽然自己不做游戏,但也是时刻了解手机应用开发的新动向.看到CSDN的"写书评得技术图书赢下载分"活动,就申请了一本<iOS c ...
- Unity游戏开发--30s制作精美地图
"君子生非异也.善假于物也"--<劝学>荀子 引用这句话的目的,是我觉得有时候.利用工具来提高游戏开发效率是很必要的. 利用工具,解放程序员双手. 今天想给大家介绍下. ...
- (转载)如何学好iphone游戏开发
转自:http://www.cnblogs.com/zilongshanren/archive/2011/09/19/2181558.html 自从发布<如何学习iphone游戏开发>到 ...
- Unity3D游戏开发从零单排(四) - 制作一个iOS游戏
提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...
- 【Cocos2D研究院之游戏开发】
http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发] 201211-19 Co ...
- cocos2d 游戏开发实战
文章转自:http://uliweb.clkg.org/tutorial/read/40 6 cocos2d 游戏开发实战 6.1 创建cocos2d项目 6.2 cocos2d v3 & ...
- Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机
Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机 Unity中制作一个望远镜 本节制作的望远镜,在鼠标左键按下时,看到的视图会变大:当不再按下的时候,会慢慢缩小成原来的视图.游戏中时常出现的 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴
上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...
- 22、Cocos2dx 3.0游戏开发找小三之音乐与音效:假如世界上没有了音乐,你的耳朵会孤单吗?
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30485103 假如世界上没有了音乐,在森林里.我们听 ...
随机推荐
- 批处理bat脚本编写(附详细例子)
批处理bat脚本编写(附详细例子) 由于在项目开发的过程中经常需要编写bat脚本,而看大牛们编写 ...
- Android SQLite 数据库 增删改查操作
Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...
- zookeeper集群的python代码测试
上一篇已经讲解了如何安装zookeeper的python客户端,接下来是我在网上搜到的例子,举例应用环境是: 1.当有两个或者多个服务运行,并且同意时间只有一个服务接受请求(工作),其他服务待命. 2 ...
- Android截图
Android截图很好的实现,从文档的发展,查看View有一个接口getDrawingCache(),这个接口可以得到View当调用这个接口的位图图像Bitmap. 抓取截图View在图像的某一个时刻 ...
- 解决Fedora升级时nvidia显卡问题
升级到新版Fedora后登录不了gnome 小编最近升级了Fedora 20到21,结果就如之前从Fedora 19升级到20时类似,又出问题了.Fedora你到底行不行... gnome登录不了 ...
- 开源Math.NET基础数学类库使用(12)C#随机数扩展方法
原文:[原创]开源Math.NET基础数学类库使用(12)C#随机数扩展方法 本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p ...
- 大约linux的几个问题,你能回答几个?--回复14-20称号
14.select和poll差异?Poll和epoll的差别? (1)select和poll的差别:(參考:http://blog.csdn.net/mituan2008/article/detail ...
- (hdu step 6.3.7)Cat vs. Dog(当施工方规则:建边当观众和其他观众最喜爱的东西冲突,求最大独立集)
称号: Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- NET MVC权限验证
ASP.NET MVC权限验证 封装类 写该权限类主要目地 为了让权限配置更加的灵活,可以根据SQL.json.或者XML的方式来动态进行页面的访问控制,以及没有权限的相关跳转. 使用步骤 1.要建一 ...
- Nginx搭建反向代理服务器过程详解(转)
一.反向代理 我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景: 1.服 ...