【发布时间】:2014-07-25 18:57:40
【问题描述】:
我在 SpriteBuilder 中制作了两个场景,一个是 Shop,另一个是 UpgradesNew。 Shop 是一个 CCNode 层,UpgradesNew 是一个 CCNode 层。我在 MainScene 中有两个 CCScrollView,分别加载 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 放在标题中。除此之外,我什么都不做。
【问题讨论】:
-
这是解决您昨天发布的同一问题的另一种方法,但未能提供清晰、有意义的信息来帮助回答您的问题?
-
@nhgrif 是的,因为每个人都停止回复了,所以我试图找到解决方案。我看不出您还需要什么其他信息。初始化是通过 SpriteBuilder 完成的。我把我的其他类似问题放在前面,大多数人都能提供帮助。
-
这段代码和昨天有完全相同的问题。您不是使用对现有对象的引用,而是创建一个新对象并使用它。昨天你在新对象上调用了一个方法——今天你试图将新对象设置为委托。
-
您需要学习一些非常简单的 OOP 教程。你的问题很明显——即使你承认你知道问题出在哪里,但是因为你对 OOP 概念的理解不够好,你甚至不知道在你的问题中包含什么才能让别人输入你的代码需要复制粘贴到您的项目中。
-
@nhgrif 我更新了原帖
标签: ios objective-c cocos2d-iphone delegates