【问题标题】:CCMenuItemImage isn't showing the selected stateCCMenuItemImage 未显示选定状态
【发布时间】:2012-04-09 20:59:59
【问题描述】:

documentation for CCMenuItemImage 实际上并没有说明它的作用。

CCMenuItem 有很多子类。 我继承了一个将其用作按钮的项目。

CCMenuItem *start;
start = [CCMenuItemImage itemFromNormalImage:[self prefixedImage:@"start button.png"]
                               selectedImage:[self prefixedImage:@"start button selected.png"]
                                      target:myTarget
                                    selector:@selector(start:)];

在两种状态下都使用相同的按钮。 我对其进行了修改,以使所选状态具有不同的图像。

我期待/希望当我触摸该项目时它会突出显示,当我释放按钮时它会发送我的目标操作(它确实如此)。

(顺便说一句:用 iOS 的说法,我知道 highlightedselected 是两个不同的东西。但是这个库似乎没有那个区别。)

所以:

  • 是否打算将此“菜单项”用作按钮?
  • 何时显示此菜单项的选定图像?
  • 我应该如何让它显示为选中状态?

【问题讨论】:

  • 提问时分心会导致您不提问。 :) 编辑添加 3,只是为了更好的衡量。

标签: cocos2d-iphone ccmenuitem


【解决方案1】:

CCMenuItem 是一个抽象类,所有其他菜单项都从该类继承,因此您在代码中所做的在技术上是错误的。

另一方面,您可以将 CCMenuItem 子类化以创建自己的自定义类(例如:您不能使用按钮和标签作为菜单项,您必须使用按钮本身和标签在上面..只是为了展示,或者使用标签和下面的按钮......毫无意义)

子类化 CCMenuItem 并创建自己的类可以解决这个问题(我的意思是你可以创建一个方法来获取图像和字符串并返回一个按钮)

你想做的是这样的:

 CCMenuItemImage *button= [CCMenuItemImage itemFromNormalImage:@"start button.png"
                           selectedImage:@"start button selected.png"
                                  target:self
                                selector:@selector(start:)];

 CCMenu *start=[CCMenu menuWithItems:button,nil];
start.position=ccp(200,200);
[self addChild:start];

当您将手指放在菜单上时,它将用选定的图像替换普通图像,但只会在您在按钮的边界框中释放它时激活(又名..您可以按下按钮,移动手指远离按钮,它不会激活)。 因此,在某种意义上,该按钮会突出显示,直到您松开手指,然后才会被选中。

这是否回答了您的问题?

【讨论】:

  • 正在创建一个CCMenuItemImage,而不是抽象超类。
  • 你试过我的代码了吗?它有效吗?它对它不起作用是什么?
  • 天啊!刚刚意识到我将新图像添加到文件结构中,但没有添加到项目中。当找不到图像时,它会静默/安全地失败。 #usererror 感谢您与我一起集思广益!
  • lolz 你如何在文件结构中添加一些东西而不添加到项目中?你没有使用添加文件吗?
  • 我在文件系统中复制了它,将其重命名为“已选择”,编辑了图像以使其看起来不同,. . .啦啦啦啦啦. . 手掌
【解决方案2】:

试试这个代码...

CCMenuItemImage *backbtn = [CCMenuItemImage itemFromNormalImage:@"backbtn.png" selectedImage:@"backbtn_selected.png" target:self selector:@selector(LBback)];
CCMenu *Menu1 = [CCMenu menuWithItems:backbtn,nil];

[Menu1 alignItemsVerticallyWithPadding:15];
Menu1.position = ccp(160, 240);
[self addChild:Menu1];

借助这个..当您触摸图像时,会显示所选图像,其他明智的正常图像...:)

稍后当你的函数被调用并且你想改变它的图像时,你可以这样设置..

 [backbtn setNormalImage:[CCSprite spriteWithFile:@"backbtn_selected.png"]];

【讨论】:

    【解决方案3】:

    上面的代码是正确的。

    供选择的图像资源未添加到项目中,因此未显示。它可能在创建时输出了错误消息(埋在其他输出中),但在点击时没有输出错误消息。

    无声/安全故障使用户错误更难追踪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 2015-11-28
      • 2019-04-07
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多