使用CCBReader加载场景

时间:2014-11-07 22:56:41

标签: ios objective-c cocos2d-iphone

我有一个CCScrollView在用户点击按钮时打开。我还想“重新初始化”处理此CCScrollView的UI元素的类。我这样做是通过将[CCBReader load:@"Shop"]; Shop作为此CCScrollView的自定义类来调用的。 Shop设置CCScrollView的所有标签和按钮。

打开CCScrollView(位于MainScene):

-(void)openShop
{
        [CCBReader loadAsScene:@"Shop"];
        CCScrollView *scroll = [[CCScrollView alloc]initWithContentNode:shopNode];
        [shopNode setContentSizeInPoints:(CGSizeMake(320, 1000))];
        [scrollContainer addChild:scroll z:0 name:@"scrollName"];
        [scroll setContentSizeInPoints:(CGSizeMake(320.0, 370.0))];
        [scroll setHorizontalScrollEnabled:NO];
        [scroll setPosition:(CGPointMake(0, 70))];
}

Shop的初始化方法:

-(id)init
{
    if ([super init]) {
        if (i == 0) {
            cell1.string = @"hello";
            i++;
        } else {
            cell1.string = @"ffff";
        }
    }
    return self;
}

所以我想要做的是,当我第一次运行程序并且所有类都被初始化时,cell1的字符串是“hello”,并且它向i添加1。然后,当我打开CCScrollView时,Shop应该再次初始化,因为我是1,cell的字符串应该更改为“ffff”。问题是它没有更改cell1.我可以放在显示随机文本的NSLog的字符串,并且可以完美地运行,但cell1的字符串不会更改。这是为什么?

1 个答案:

答案 0 :(得分:0)

每次打开滚动视图时,都会创建一个新的Shop实例。此时将'i'值设置为1的前一个实例取消分配,因此每次重新开始时i为0。

快速解决方法是使i成为@interface之外的静态变量。我强烈建议重命名。

static int index = 0;

-(id)init
{
    if ([super init]) {
        if (index == 0) {
            cell1.string = @"hello";
            index++;
        } else {
            cell1.string = @"ffff";
        }
    }
    return self;
}

更好的方法是将索引值存储在商店外部,并在创建时将其传递给商店实例。