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 假如世界上没有了音乐,在森林里.我们听 ...
随机推荐
- 使用Spring的@Autowired 实现DAO, Service, Controller三层的注入(转)
简述: 结合Spring和Hibernate进行开发 使用@Autowired实现依赖注入, 实现一个学生注册的功能,做一个技术原型 从DAO(Repository) -> Service -& ...
- cidaemon.exe过程cpu入住率和关闭cidaemon.exe加工方法
问题叙述性说明: 这个时间机器始终是一个奇怪的问题:cidaemon.exe这个过程需要CUP率98%以上,大大影响了正常使用电脑.多个资源管理器出现cidaemon.exe过程,cpu率最高的一 ...
- window忘记密码怎么办
net命令 Net User 功能:添加或更改用户帐号或显示用户帐号信息. 格式:net user [username [password | *] [options]] [/domain] ne ...
- Sliverlight实例之 绘制扇形和环形图
一,1道几何题 已知两点坐标确定一条直线,直线上存在一个未知点,起始点与未知点的距离已知 求:未知点坐标 思路,如下: 求AB长度,可以根据两点距离公式 二,写个C#类 定义一个Point类,代表坐标 ...
- ubuntu12.04硬盘安装
ubuntu12.04发布了 , 安装又是一个话题.安装系统有很多方法,比如livecd,和u盘,但这些都需借用外部设备,所以硬盘安装是最好不过的方法了.u盘,cd安装都非常的简 单,对于那些讨厌用光 ...
- vector和list删除元素
#include <iostream> #include <vector> #include <list> using namespace std; int mai ...
- Jafka来源分析——Processor
Jafka Acceptor接受client而建立后的连接请求,Acceptor会将Socket连接交给Processor进行处理.Processor通过下面的处理步骤进行client请求的处理: 1 ...
- android采用videoView播放视频(包装)
//android播放视频.用法:于androidManifest.xml添加activity, // <activity android:name=".PlayVideo" ...
- 90社交网络的行为报告后:不拒绝陌生人,TFBOYS作为一个喜爱
依据腾讯QQ与易观合作的<2014中国90后青年调查报告>,盘点了90后使用社交网络的行为习惯. 相比于70.80后.90后更愿意在社交媒体上公布自己照片.状态,且更愿意在即时通讯中加陌生 ...
- 第三篇——第二部分——第六文 监控SQL Server镜像
原文:第三篇--第二部分--第六文 监控SQL Server镜像 原文出处:http://blog.csdn.net/dba_huangzj/article/details/26846203 要优化, ...