【问题标题】:Changing label color of a label in a different layer更改不同图层中标签的标签颜色
【发布时间】:2014-06-03 22:05:58
【问题描述】:

所以我有一个名为MainScene 的场景,其中CCScrollView UpgradesScroller 包含名为UpgradesNew 的层。我有一个按钮,当点击MainScene 时,应将hasItem 布尔值设置为YES,然后当UpgradesNew 层未隐藏时,应根据布尔值的输出更改标签颜色。

这是我尝试过的。

hasItem 设置为真:

-(void) buyItem {
        hasItem = true;
    }
}

MainScene 中,这是UpgradesNew 未隐藏时使用的方法。

-(void)Upgrades {
    UpgradesNew *upNew = [[UpgradesNew alloc]init];
    [upNew changeColor];
    if (upgradesScroller.visible == NO) {
        upgradesScroller.visible = YES;
    } else if (upgradesScroller.visible == YES) {
        upgradesScroller.visible = NO;
    }
}

UpgradesNew

-(void)changeColor {
    if (hasItem == true) {
        label.color = [CCColor greenColor];
        NSLog(@"changecolor");
    }
}

我认为问题在于我分配了一个空的 UpgradesNew 实例。但我不确定如何以正确的方式做到这一点。

【问题讨论】:

  • 什么是 CCScrollView?什么是CCColor?为什么在 Objective-C 代码中使用 true 而不是 YES?为什么要使用== 来检查if 中的bool
  • 是 cocos2d.. true 和 yes 是一样的。使用 == 是因为 YES/NO 和 true/false 是整数(分别为 0 和 1)
  • 评估结果为真或假...您的代码将运行 100% 与删除 == true 完全相同。世界上没有一种编程语言是不正确的......
  • upgradesScroller.visible = !upgradesScroller.visible; ...您的 if/else/yes/no/true/false 讨论是无效的 ;) 我不喜欢混合风格,要么坚持是/否或真/假。是/否是 objc 的默认设置。
  • TRUE 和 YES 都是同一事物的有效同义词。 (FALSE 和 NO 相同。)我可以互换使用它们。不确定“真实”。我相信这是 C 语言,而不是 Objective C。构造 if (value == TRUE)if (value == YES) 完全有效,并且在逻辑上与 if (value) 相同。这是风格问题。有些人发现if (value == TRUE) 更容易阅读。 nhgrif,无意冒犯,但你是在抓稻草。

标签: ios objective-c colors cocos2d-iphone


【解决方案1】:

问题有点混乱,信息有点不完整,但我只能假设问题出在这里:

UpgradesNew *upNew = [[UpgradesNew alloc]init];

我猜UpgradesNew 是您已经实例化并在屏幕上的某种视图或视图控制器。当您调用[[UpgradesNew alloc] init]; 时,您正在创建一个新对象。相反,您需要的是对您打算更改的当前存在的UpgradesNew 对象的引用。您需要在这个现有对象上调用changeColor 方法,而不是创建一个新对象。

编辑:如果您需要有关如何获取对正确对象的引用的帮助,您需要在问题中提供更多详细信息 - 正如所写的那样,这些对象之间的关系没有太多暗示。

【讨论】:

  • 是的,你是对的。如何引用现有的 UpgradesNew?出现错误时,我不能只执行“[UpgradesNew changeColor]”。
  • 您的问题需要更多信息。我不知道你的对象之间的关系。
  • 我刚刚添加了更多信息
  • 你添加的信息完全不相关。我们一致认为问题不在于布尔值,不是吗?有用的信息将包括描述MainScene 和任何UpgradesNew 对象之间关系的任何和所有信息,这些信息在我们获得任何已发布的代码之前存在。
  • 抱歉,我不确定我需要提供什么。 MainScene 是一个场景,UpgradesNew 是一个图层。它们都只是我的项目中的类,具有 CCNode 的子类,并且在 SpriteBuilder 中包含它们各自的 CCB 文件的代码。编辑:滚动视图是主场景 CCNode 的子节点。
猜你喜欢
  • 2014-07-25
  • 2017-07-09
  • 1970-01-01
  • 2013-06-11
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多