CCMenu位置的一些理解和制作一个中心放大的按钮(无需修改底层代码)
(版权所有,转载请注明出处,谢谢:)http://www.cnblogs.com/binxindoudou/archive/2013/04/26/3045737.html)
最近在做一个CCMenu中心放大的按钮时,发现始终调整不了CCMenuItem的锚点值,以至于这个放大总是以左下角位中心点放大,很是纠结。于是开始上网查找资料,发现有一篇帖子被大家疯狂转载,就是修改底层代码的那个,大家有兴趣的话可以去搜搜看看。但是我也不知道这样好不好,所以就和同学研究后另想了两种方法,虽然也不是特别好,但至少可以解决问题了。
直接上代码吧
1.方法一(推荐使用)(不修改锚点,只调整位置,适用于两个大小图片不同,直接修改位置就好)
1 CCSprite *unselectedSprite= [CCSprite spriteWithFile:@"icon.png"]; 2 CCSprite *selectedSprite = [CCSprite spriteWithFile:@"icon-72.png"]; 3 selectedSprite.position = ccp((unselectedSprite.textureRect.size.width-selectedSprite.textureRect.size.width)/2,(unselectedSprite.textureRect.size.height-selectedSprite.textureRect.size.height)/2); 4 CCMenuItem *item = [CCMenuItemImage itemWithNormalSprite:unselectedSprite selectedSprite:selectedSprite]; 5 CCMenu *menu = [CCMenu menuWithItems:item, nil]; 6 [self addChild:menu];
2.方法二 (适用于通过调整比例,同一个图片,但是显得有点不整齐,可读性不好,因为最后调整锚点有点突兀)
1 CCSprite *unselectedSprite= [CCSprite spriteWithFile:@"icon.png"]; 2 CCSprite *selectedSprite = [CCSprite spriteWithFile:@"icon.png"]; 3 selectedSprite.scale = 1.5; 4 selectedSprite.position = ccp((unselectedSprite.textureRect.size.width-selectedSprite.textureRect.size.width)/2,(unselectedSprite.textureRect.size.height-selectedSprite.textureRect.size.height)/2); 5 CCMenuItem *item = [CCMenuItemImage itemWithNormalSprite:unselectedSprite selectedSprite:selectedSprite]; 6 CCMenu *menu = [CCMenu menuWithItems:item, nil]; 7 [self addChild:menu]; 8 unselectedSprite.anchorPoint = ccp(0.5,0.5); 9 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 }
(版权所有,转载请注明出处,谢谢:)http://www.cnblogs.com/binxindoudou/archive/2013/04/26/3045737.html)