0

正如人们可能期望的那样,我是 Objective-C 和 Cocoa2d 的新手,所以这可能很明显,但我似乎无法让它以一种有意义的方式工作。

我要做的是制作一个包含 10 个成员的数组(稍后将添加更多),其中包含 [0,1,2,3] 整数,稍后我希望这些数字用于级别选择屏幕,其中0 表示关卡已锁定(未完成),数字 >0 表示星数(三分之二),表示关卡已完成,在关卡结束时我想更改数组以反映关卡完成。出于测试目的,我用“随机整数”(0-3)填充数组(in LevelSelection.m):

NSMutableArray *LevelCompArray = [NSMutableArray arrayWithCapacity:10];
        for(int i = 0; i<10; i++){
            int x= (arc4random() % (4));
            [LevelCompArray addObject:[NSNumber numberWithInteger:x]];
        }

我没有分配也没有初始化数组,但它似乎在函数本身内工作,-(id) init尽管我相信这是我问题的根源。

我的问题很简单,我如何将这个数组(以及我将在游戏进行时创建的其他数据)从一个类传输到另一个类(例如 from LevelSelection.mto LevelCompleted.m)和从一个函数到另一个函数(例如-(id) initand -(void) launchLevel)。我是否有一个所有必需​​类都可以访问的数据集中文件?如果是这样的话,所有关于“.plist”的话题是什么?如果不是,我是否通过方法将数据传输到目标类/方法?我怎么做?

非常感谢任何帮助,将我转移到教程也将非常有用。

4

2 回答 2

2

你应该使用数组的属性。像这样:首先你需要在 secondviewcontroller.h 中创建数组,像这样:

    NSMutableArray *LevelCompArray;
    @property (nonatomic, retain) NSMutableArray *LevelCompArray;

然后在secondviewcontroller.m中合成:

@synthesize LevelCompArray;

然后,例如,您想在 FirstViewController 中的按钮被触摸时传递 Array。在其操作中,您可以将其设置为获取第二个视图控制器的实例,如下所示:

secondViewController.LevelCompArray = someArray;

实际上它是在视图控制器之间传递数据,有关更多信息,请查看此链接: 在视图控制器之间传递数据

希望这有帮助。

于 2012-07-13T20:59:44.117 回答
2

正如您所说,一种方法是在每个人的文件中都有一堆全局变量#import。您不会使用.plist文件;相反,它.m就像您的所有其他源代码一样。

您还可以将信息传递给任何需要它的对象的构造函数。例如,您可以执行类似[[LevelSelection alloc] initWithCompletionArray:LevelCompArray]. 然后,为了确保每个对象在所述数组中都有正确的信息,请使用通知。

-(id) initWithStuff:(Stuff *s) {
    if(self = [super init]) {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(doStuff:)
                                                     name:@"LEVEL_COMPLETED"
                                                   object:anObject];
    }

然后在doStuff:(需要一个NSNotification*)中,您将有一些逻辑来处理发生的任何事情,使用通知的对象。

于 2012-07-13T21:07:04.780 回答