CCMenu位置的一些理解和制作一个中心放大的按钮(无需修改底层代码)
2013-04-26 20:04
302 查看
(版权所有,转载请注明出处,谢谢:)/article/5599978.html)
最近在做一个CCMenu中心放大的按钮时,发现始终调整不了CCMenuItem的锚点值,以至于这个放大总是以左下角位中心点放大,很是纠结。于是开始上网查找资料,发现有一篇帖子被大家疯狂转载,就是修改底层代码的那个,大家有兴趣的话可以去搜搜看看。但是我也不知道这样好不好,所以就和同学研究后另想了两种方法,虽然也不是特别好,但至少可以解决问题了。
直接上代码吧
1.方法一(推荐使用)(不修改锚点,只调整位置,适用于两个大小图片不同,直接修改位置就好)
2.方法二 (适用于通过调整比例,同一个图片,但是显得有点不整齐,可读性不好,因为最后调整锚点有点突兀)
3.上述代码的解释和CCMenu使用的一些理解
1⃣ 第一种方法解释:不修改锚点,就算好大图正确的位置
如图:
2⃣ 第二种方法解释:通过理解CCMenuItem的底层实现,发现在[CCMenuItemImage itemWithNormalSprite:unselectedSprite selectedSprite:selectedSprite]的内部是修改了两个精灵的锚点,所以在之前所做的修改锚点是无效的,只有在之后修改锚点才会有效,但是看起来很别扭,不推荐使用。
3⃣ 关于CCMenu的响应触摸事件,注意的是CCMenu一直默认都在[[[CCDirectorsharedDirector] touchDispatcher]这个响应队列里,所以无需重新吞没事件。
但是CCMenu有时候我们需要调整它的响应优先级,比如两个CCMenu重叠时,想调整一下,有一个函数(见下)请注意:
只有在这个函数里写才有作用,否则会报错说是Delegate没找到,现在还没弄清楚为什么,希望有大神能够指教一下。
(版权所有,转载请注明出处,谢谢:)/article/5599978.html)
最近在做一个CCMenu中心放大的按钮时,发现始终调整不了CCMenuItem的锚点值,以至于这个放大总是以左下角位中心点放大,很是纠结。于是开始上网查找资料,发现有一篇帖子被大家疯狂转载,就是修改底层代码的那个,大家有兴趣的话可以去搜搜看看。但是我也不知道这样好不好,所以就和同学研究后另想了两种方法,虽然也不是特别好,但至少可以解决问题了。
直接上代码吧
1.方法一(推荐使用)(不修改锚点,只调整位置,适用于两个大小图片不同,直接修改位置就好)
CCSprite *unselectedSprite= [CCSprite spriteWithFile:@"icon.png"]; CCSprite *selectedSprite = [CCSprite spriteWithFile:@"icon-72.png"]; selectedSprite.position = ccp((unselectedSprite.textureRect.size.width-selectedSprite.textureRect.size.width)/2,(unselectedSprite.textureRect.size.height-selectedSprite.textureRect.size.height)/2); CCMenuItem *item = [CCMenuItemImage itemWithNormalSprite:unselectedSprite selectedSprite:selectedSprite]; CCMenu *menu = [CCMenu menuWithItems:item, nil]; [self addChild:menu];
2.方法二 (适用于通过调整比例,同一个图片,但是显得有点不整齐,可读性不好,因为最后调整锚点有点突兀)
CCSprite *unselectedSprite= [CCSprite spriteWithFile:@"icon.png"]; CCSprite *selectedSprite = [CCSprite spriteWithFile:@"icon.png"]; selectedSprite.scale = 1.5; selectedSprite.position = ccp((unselectedSprite.textureRect.size.width-selectedSprite.textureRect.size.width)/2,(unselectedSprite.textureRect.size.height-selectedSprite.textureRect.size.height)/2); CCMenuItem *item = [CCMenuItemImage itemWithNormalSprite:unselectedSprite selectedSprite:selectedSprite]; CCMenu *menu = [CCMenu menuWithItems:item, nil]; [self addChild:menu]; unselectedSprite.anchorPoint = ccp(0.5,0.5); selectedSprite.anchorPoint = ccp(0.5,0.5);
3.上述代码的解释和CCMenu使用的一些理解
1⃣ 第一种方法解释:不修改锚点,就算好大图正确的位置
如图:
2⃣ 第二种方法解释:通过理解CCMenuItem的底层实现,发现在[CCMenuItemImage itemWithNormalSprite:unselectedSprite selectedSprite:selectedSprite]的内部是修改了两个精灵的锚点,所以在之前所做的修改锚点是无效的,只有在之后修改锚点才会有效,但是看起来很别扭,不推荐使用。
3⃣ 关于CCMenu的响应触摸事件,注意的是CCMenu一直默认都在[[[CCDirectorsharedDirector] touchDispatcher]这个响应队列里,所以无需重新吞没事件。
但是CCMenu有时候我们需要调整它的响应优先级,比如两个CCMenu重叠时,想调整一下,有一个函数(见下)请注意:
只有在这个函数里写才有作用,否则会报错说是Delegate没找到,现在还没弄清楚为什么,希望有大神能够指教一下。
1 - (void)onEnter 2 { 3 [superonEnter]; 4 [menu setHandlerPriority:priorityYouWant]; 5 }
(版权所有,转载请注明出处,谢谢:)/article/5599978.html)
相关文章推荐
- CCMenu位置的一些理解和制作一个中心放大的按钮(无需修改底层代码)
- Cocos2d-x 点击菜单按键居中放大(无需修改底层代码)
- .NET中用弹出窗口添加或修改一个页面,当添加或修改相关内容后按下提交按钮自动刷新页面的JS代码
- java代码swing编程 制作一个单选按钮的Frame
- 我提问的:找一个通用函数,修改同一类别的控件的一些属性,或者优化、重构下面的代码。
- 实现一个简单的按钮实例-上下左右,左旋转,右旋转,放大缩小。代码重构
- CPictureEX类的一个扩展或修改(图片的放大与缩小)
- 下拉列表select onChange 就出现一个相关option 的text的带自关闭按钮的js 代码
- js实现:点击一个按钮,弹出一个div,并向其中传值,修改后,再传出
- 一个简单的javascript图片放大效果代码
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- linux一些重要参数的修改位置
- 制作一个页面网格,可以用来把自己所做的UI和需求图片进行位置,像素比较
- 一个带有点击效果和计时功能可圆角的自定义Button(支持XML和代码修改属性)
- 最近距离 已知平面上的若干点的位置,存入一个List中。现在需要计算所有这些点中, 距离最近的两个点间的最小距离。请补全缺失的代码。
- 关于cas-client单点登录客户端拦截请求和忽略/排除不需要拦截的请求URL的问题(不需要修改任何代码,只需要一个配置)
- socket网络编程一些理解(未涉及代码)
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 根据一段代码理清一些变量,常量,数组,指针的关系及理解