您的位置:首页 > 编程语言

CCMenu位置的一些理解和制作一个中心放大的按钮(无需修改底层代码)

2013-04-26 20:04 302 查看
(版权所有,转载请注明出处,谢谢:)/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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐