在不同的视图中更改标签的标签颜色(委托?)[Spritebuilder]

时间:2014-06-04 23:08:22

标签: ios objective-c cocos2d-iphone delegates

我在SpriteBuilder中创建了两个场景,一个是Shop,另一个是UpgradesNew。 Shop是CCNode层,UpgradesNew是CCNode层。我在MainScene中有两个CCScrollViews,分别加载Shop和UpgradesNew。

点击商店中的一个按钮时,UpgradesNew中的标签应更改颜色。我一直在尝试使用代理来实现它,但它不起作用。

这就是我做的......

在shop.h中我设置了协议:

@protocol changeColorProtocol <NSObject>
@required
     -(void)changeColor;
@end

然后我设置了id

@property (nonatomic, retain) id <changeColorProtocol> delegate;

这是单击时应该使用changeColor的按钮。这是在shop.m

-(void) buyDiggerShibe {
        [self.delegate changeColor];
        [self didLoadFromCCB];
}

现在在UpgradesNew.h中我使用了这样的协议

@interface UpgradesNew : CCNode <changeColorProtocol>

在UpgradesNew.m

我在ViewDidLoad中将委托设置为self。

Shop *shop = [[Shop alloc]init];
shop.delegate = self;

-(void)changeColor {
    if (hasDigger == YES) {
        shovelRequires.color = [CCColor greenColor];
        NSLog(@"HEY HEY HEY");
    }
}

我可能将代理的某些部分放在错误的区域,因为我试图在它不工作时切换它们,我不确定它们应该去哪里。我看过多个委托教程,看起来过于复杂,至少我正在尝试做什么。

有什么想法吗?

编辑:

试过这个。

我在UpgradesNew中创建了一个属性

@property (strong, nonatomic) Shop *shop;

然后我在实现中合成它并在didLoadFromCCB中像这样分配它,而不是创建一个新对象:

self.shop = [[Shop alloc]init];
shop.delegate = self;

编辑:这就是我创建对象的方式。

将标签拖到图层中。 Identify it然后在标题中将其定义为CCLabelTTF *label;就是这样,这就是我在图层上创建任何对象所做的一切。

要创建像Shop或UpgradesNew这样的图层,我点击New -> File -> Layer。这创建了一个新的CCNode。然后我设置了CCNode的类,如图所示,突出显示的CCNode具有一类MainScene。如果我想为该CCNode建立@property,我只需在自定义类下面的框中键入名称,并将其设置为doc root var,然后将其作为CCNode *MainScene放在标题中。除此之外我什么都不做。

1 个答案:

答案 0 :(得分:0)

我对SpriteBuilder一无所知,所以解决你的问题有点困难。您可能希望将SpriteBuilder添加到帖子的标题中,以便使用该框架的人可能会阅读它。

您需要解释如何创建2&#34; CCNode图层,以及如何将它们链接在一起。为了使一个对象具有另一个对象作为委托,必须在某处设置委托属性。设置在哪里?您是否在行

处设置了断点
[self.delegate changeColor];

确保self.delegate不是nil?

您是否在changeColor方法中设置了断点,或添加了日志语句,以查看它是否被调用?我的猜测是self.delegate是零,所以消息被丢弃在地板上(在Objective-C中将消息发送到nil是合法的。它只是没有做任何事情。)