实例变量 child 的位置未更新

Position of child of instance variable not updating

希望这是一个相当简单的问题。我从我的主游戏场景 Grid.m 创建了一个名为 tutorialBox1 的实例变量。在我的 class TutorialBox.m 中,我创建了一个名为 textBox1 的精灵,当我点击主游戏场景时,我希望更新该精灵的位置 textBox1 .几个小时以来,我一直在试图弄清楚为什么在添加 child 一次后精灵的位置不会更新。这是我的尝试,以及所有必要的代码。

Grid.m

@ implementation Grid {
    TutorialBox *tutorialBox1;
}

-(void)checkTutorials {
    //This method is called upon loading of the scene
    tutorialBox1 = (TutorialBox*)[CCBReader load:@"TutorialBox"] //creates instance of variable using Spritebuilder (don't worry if you don't use SB, this part works)
    [tutorialBox1 updateBoxDisplay:1] //used to add text box child to textBox1
    [self addChild:tutorialBox1];
}

-(void)gridTapped {
    //When game scene is tapped, this is called to update position of textBox1 in tutorialBox1
    [tutorialBox1 updateBoxDisplay:2]; //updates position of textBox1 in tutorialBox1
}

TutorialBox.m

@ implementation Grid {
    CCSprite9Slice *textBox1;
}

-(void)didLoadFromCCB {
    //Called upon initialization of tutorialBox1
    textBox1 = [CCSprite9Slice spriteWithImageNamed:@"RetroSprites/tutorialtextBox1.png"];
}

-(void)updateBoxDisplay:(int)newTutorialLevelNumber {
    if (newTutorialLevelNumber == 1) {
        textBox1.position = ccp(0,0);
        [self addChild:textBox1];
    }
    else if (newTutorialLevelNumber == 2) {
        textBox1.position = ccp(100,100)
    }
} 

TutorialBox.h

@interface TutorialBox : CCNode

- (void)updateBoxDisplay:(int)newTutorialLevelNumber

@end

我已经检查过以确保打印语句的所有内容都 运行 正确,所以这不是其他任何问题。它只是被调用,但我的主要游戏场景中的位置 Grid.m 没有被更新。

感谢您的帮助!

我不确定这一点,但我猜它与线程有关。试试这个代码:

-(void)updateBoxDisplay:(int)newTutorialLevelNumber {

   dispatch_async(dispatch_get_main_queue(), ^{

       if (newTutorialLevelNumber == 1) {
          textBox1.position = ccp(0,0);
          [self addChild:textBox1];
       }
       else if (newTutorialLevelNumber == 2) {
          textBox1.position = ccp(100,100)
       }

   });
}