我在使用带有缩放CCMenuItemSprite菜单项的CCMenu时遇到问题。我正在尝试根据玩游戏的设备不同地缩放精灵菜单项( iPad需要将其缩放到1.5倍左右,而在iPhone上大约是0.75倍)
据我所知,我们不能直接缩放CCSprite,也不能缩放CCMenuItemSprite,因为当它添加到CCMenu中时,触摸矩形不会正确更新。我相信我必须缩放CCMenu来缩放菜单项。
每当我这样做的时候,我的精灵似乎会缩放到正确的大小,但是它似乎也会缩放CCMenu位置坐标,但方向与我预期的相反。而且,一旦我超过了某个阈值,菜单似乎就完全消失了。
有没有人对如何在CCMenu中扩展精灵有什么建议?
提前谢谢。Buzzrick
发布于 2012-08-17 13:17:04
尝试此代码........
CCMenuItemImage *Btn1 = [CCMenuItemImage itemWithNormalImage:@"button1.png" selectedImage:@"button1_active.png" target:self selector:@selector(button1_click:)];
CCMenuItemImage *Btn2 = [CCMenuItemImage itemWithNormalImage:@"button2.png" selectedImage:@"button2_active.png" target:self selector:@selector(button2_click:)];
CCMenu *Action_menu = [CCMenu menuWithItems:Btn1,Btn2, nil];
[Action_menu setPosition:ccp( 79, 288)];
float delayTime = 0.3f;
for (CCMenuItemFont *each in [Action_menu children])
{
each.scaleX = 0.0f;
each.scaleY = 0.0f;
CCAction *action = [CCSequence actions:
[CCDelayTime actionWithDuration: delayTime],
[CCScaleTo actionWithDuration:0.5F scale:1.0],
nil];
delayTime += 0.2f;
[each runAction: action];
}
[self addChild:Action_menu];发布于 2012-08-17 18:01:47
我的建议是什么?别!
在内部,每当你触摸菜单项时,CCMenu都会对其进行缩放。如果你点击并按住一个项目,你会注意到这一点,它被放大(放大)。因此,无论您应用于菜单项的缩放,最迟在菜单项被触摸时都会丢失。
然后,正如您注意到的,缩放会影响项目的触摸区域。它可能导致项目对项目外部的触摸做出响应,或者不响应触摸,具体取决于缩放级别。出于同样的原因,我也不会扩展CCMenu。
长话短说,如果您必须对菜单项应用缩放,请编写您自己的菜单项代码。可能是以CCMenu代码为基础,剥离不需要的代码并进行所需的更改。
但实际上最简单的方法是使用文件后缀-hd、-ipad和-ipadhd提供菜单项图像,并相应缩放。尝试使用scale属性来实现这一点是非常痛苦的。
发布于 2012-08-19 09:26:10
下面是我最终解决这个问题的方法:基本上,我首先创建了菜单元素,然后对定位/缩放/旋转进行了排序。这似乎效果要好得多。下面的代码示例是我使用单个sprite创建两个相对的左/右箭头按钮的地方
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"ButtonSprites.plist"];
CCSpriteBatchNode *buttonSprites = [CCSpriteBatchNode batchNodeWithFile:@"ButtonSprites.png"];
[self addChild:buttonSprites];
CCSprite *arrowLeftSprite = [CCSprite spriteWithSpriteFrameNameOrFile:@"PageArrow"];
CCSprite *arrowLeftSpriteSelected = [CCSprite spriteWithSpriteFrameNameOrFile:@"PageArrow"];
arrowLeftSpriteSelected.opacity = 128;
CCSprite *arrowRightSprite = [CCSprite spriteWithSpriteFrameNameOrFile:@"PageArrow"];
CCSprite *arrowRightSpriteSelected = [CCSprite spriteWithSpriteFrameNameOrFile:@"PageArrow"];
arrowRightSpriteSelected.opacity = 128;
float buttonWidth = screenSize.width * ButtonWidthPercent;
int contentPixelWidth = arrowLeftSprite.contentSize.width;
float scale = buttonWidth / contentPixelWidth;
CCMenuItemSprite *pageLeftMenu = [CCMenuItemSprite itemFromNormalSprite:arrowLeftSprite selectedSprite:arrowLeftSpriteSelected target:self selector:@selector(buttonPageLeft:)];
CCMenuItemSprite *pageRightMenu = [CCMenuItemSprite itemFromNormalSprite:arrowRightSprite selectedSprite:arrowRightSpriteSelected target:self selector:@selector(buttonPageRight:)];
// First perform the creation
CCMenu *menu = [CCMenu menuWithItems: mainMenu, pageLeftMenu, pageRightMenu, nil];
menu.position = ccp(0, 0);
// THEN deal with layout,rotation, and scaling
pageLeftMenu.scale = scale;
pageLeftMenu.rotation = 180;
pageRightMenu.scale = scale;
float arrowHeight = screenSize.height * 0.2;
pageLeftMenu.position = ccp(screenSize.width * 0.1, arrowHeight);
pageRightMenu.position = ccp(screenSize.width * 0.9, arrowHeight);
[self addChild:menu z:2];https://stackoverflow.com/questions/11998612
复制相似问题