实例变量 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)
}
});
}
希望这是一个相当简单的问题。我从我的主游戏场景 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)
}
});
}